Github'daki projeye katkıda bulunarak, "çekme isteğimi ana öğenin üzerine nasıl yeniden sıralayabilirim"


98

Tamam, github'daki bir projeye katkıda bulunuyorum. Github'daki proje upstream, benim github'daki çatallı depom originve localbilgisayarımdaki depom .

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

sonra bir çekme talebi gönderiyorum

git push origin master

Çekme talebi incelenir ve ilgisiz bir değişiklik yapılması gerekir. Başka biri taahhütte bulunur ve birleşirupstream/master

Şimdi bakımcı tarafından "çekme isteğimi ana makinenin üzerineupstream yeniden düzenlemem " isteniyor

Bu benim hikayem (Kanun ve Düzen ses efektini ekleyin) .....

Çekme isteğinde herhangi bir değişiklik yapmadım ve dallanma özelliğinde hala aynı işleme devam ediyor.

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

Ben anlamadım upstream/masterÇekme isteğimi gönderdikten sonra birisinin taahhütte bulunduğunu ve birleştiğini bildiğimde bu nasıl mümkün olabilir origin/feature?

Biri bana bu durumda doğru prosedürün ne olması gerektiğini söyleyebilir mi?

Yanıtlar:


110

Yalnızca yukarı akış deposunda bir getirme gösterirsiniz. Bu aslında yerel şubelerinizden hiçbirini güncellemez. Sadece bilginizi güncellerupstream . A ile upstream/masterolduğu mastergibi git pull, üzerine geri dönmeden önce masterveya daha basit bir şekilde sadece üzerine yeniden ödeme yapmadan önce sizin ile tamamen birleştirildiğinden emin olmanız gerekir upstream/master.

Yani:

git checkout master
git pull upstream master
git checkout feature
git rebase master

veya

git checkout feature
git rebase upstream/master

Güncelleme:

Yerel featureşubenizi düzelttikten sonra origin, çekme isteğini güncellemeyi bitirmek için onu geri itmeniz gerekir . featureZaten bir kez ittiğiniz için , pushbir geri ödeme tarihi değiştirdiği için tekrar yapamazsınız ve bu artık ileri sarma değildir. Normalde, bir itme "hızlı ileri olmayan" ile başarısız olursa, bunu bir çekme yaparak çözersiniz, ancak bir çekme sadece iki farklı geçmişi birleştirir, ki bu kesinlikle istediğiniz şey değildir. Bu, eski (ön yeniden ödeme) featureşubenizin yeni (yeniden ödeme sonrası ) şubeyle birleştirileceği anlamına gelir . Eski şubenin herhangi bir kaydını atarak yeni şubenin durumu ile üzerine yazmak istiyorsunuz . Bu, hızlı ileri sarma olmasa bile, itmeyi gerçekleşmeye zorlamak isteyeceğiniz anlamına gelir . Not:origin/featurefeaturegit push -f origin featuretehlikelidir ve onunla taahhütlerinizi kaybedebilirsiniz. Sadece, ne yaptığınızı bildiğinizden kesinlikle eminseniz, tam burada olduğu gibi, eski, gereksiz taahhütleri yeniden ön ödeme featuredalına kasıtlı olarak bırakmak istiyorsanız kullanın .


1
Tamam, anlıyorum, açıklama için teşekkürler. Getirmek yerine çekmem gerektiğini görüyorum. Şimdi başka bir sorunum var, git push origin featurehızlı ileri olmayan bir hata aldığımda, itemediğimde vb. Git pull --rebase bu hatayı çözer ve özellik dalımı zorlar mı yoksa bu bakımcı ve diğerleri için sorunlara neden olur mu?
fontno

1
Cevabımı baskıyı kapsayacak şekilde güncelledim.
Ryan Stewart

Benim durumumda, yukarı akış deposunu bir uzaktan kumanda olarak ekledim, ancak ondan almayı unuttum. git fetch upstreamen son değişiklikleri indirdikten sonra sonunda git rebase upstream/developçalıştı.
Alberto Chiusole

10

Şimdi, yukarı akış bakımcısı tarafından "çekme isteğimi ana makinenin üzerine yeniden düzenlemem" isteniyor

Eylül 2016'dan beri, bakımcının yeniden ödemeyi kendisi tetikleyebileceğini unutmayın.

Bkz. " Yeniden oluşturma ve çekme isteklerini birleştirme "

Yeni "Yeniden tabanla ve birleştirme" seçeneğini seçtiğinizde, çekme talebinin dalından gelen taahhütler temel dalın ucuna yeniden yüklenir ve ardından temel dalın kendisi bu yeni yeniden oluşturulmuş başa hızla iletilir. Rebase'ler, yazar bilgilerini olduğu gibi korurken, yeniden yapılan taahhütlerin kaydedicisini otomatik olarak mevcut kullanıcıya ayarlar. Çekme isteğinin dalı bu işlem tarafından değiştirilmeyecektir.

Çakışmalar nedeniyle bir geri ödeme yapılamazsa, gerektiğinde bunları manuel olarak çözebilmeniz için sizi bilgilendireceğiz.

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.