GIT birleştirme ana dalına


48

Yeni bir dalda yeni bir özellik geliştirmeye başladım ve yan tarafta ana dalımda epeyce değişiklik yaptım.

Yeni özelliği tamamladıktan sonra çok fazla birleştirme çatışması yaşamaması için ana şubeyi yeni şubemle birleştirmem mümkün mü?


Git-merge denediniz mi? Burada yardım .
karatedog,

Yanıtlar:


55

Ya git merge masterda git rebase master, ya da , bu durumda git rebase tercih ederim .

Çünkü git rebase, özellik dalındaki değişiklikler ana daldaki değişikliklerin üzerine yapılmış gibi görünüyor, bu sürüm grafiğini daha basit hale getiriyor.

Den örnek alarak git Rebase kılavuzu , git rebase masterdalında feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

Bununla birlikte, git rebasesadece dal dağıtılmadığında ya da alt kısımda karışıklık ve fazladan iş olacağında uygundur, çünkü eski A, B, C taahhütleri şimdi yerine yeni A, A, B ', C' artı F ve G daha önce orada değildi.

Sonra asıl sonuç git rebase masterdalında featureşudur:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

A, B, C taahhütleri rebazdan sonra sallanıyor, ancak ulaşılabilir durumda git reflog feature.

Biri şubenizi çektiyse veya bir yere ittiyseniz, diğer taraftan kafa karışıklığını ve fazla çalışmayı önlemek için bunun yerine birleşmelisiniz. Yukarı akış rebase'den kurtarma bölümüne bakın .

Bu git merge masterdalın sonucudur feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

Alternatif olarak, eğer git merge featuredalda olursanız master, şöyle görünür:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master

Neden yeniden kazanmayı tercih ettiğinizi ve farkın ne olduğunu açıklamalısınız. Rebase doğrusal bir tarih oluşturur - bu, bu soruya uymayabilir.
Andreas Rehm

Tamam, iyi anlıyorsam: Yeni özellik henüz tamamlanmadıysa ana şubeyi, bitirmek durumunda ise yeniden ödeme yapmam gerekir mi?
mnml

Hayır, özellik dalı kontrol git rebase masteredildiğinde, yapın ve özellik dalındaki değişiklikleri "yeniden oluşturacak" böylece ana daldaki değişikliklere "dayanır". Ana daldaki değişiklikler, özellik dalındaki değişikliklerle çakışırsa, git sizden onları çözmenizi ve devam etmenizi, atlamanızı veya iptal etmenizi ister. Emin değilseniz denemek için bir test şubesine göz atabilirsiniz git checkout -b test-feature feature(özellik şubenizin "özellik" olarak adlandırıldığı varsayılarak).
Christoffer Hammarström

Rebase'imi yaptım ama şimdi başka bir bilgisayardan çektiğimde artık şubemi göremiyorum: git check-out yaptım newfeature / git rebase master
mnml

2
Ne demek "artık şubemi göremiyorum"? Her neyse, git rebaseyalnızca şube dağıtılmadıysa kullanılmalıdır, bunun yeni bir şube olduğunu söylediğiniz için geçerli olduğunu düşündüğüm için üzgünüm. Bağlandığım dokümanlardaki akış yukarı kaynaklardan kurtarma bölümüne bakın . Bunun git mergeyerine kullanmak zorunda kalacaksınız . Ve git refloggeri almak istiyorsanız önceki özellik dal başınızı bulmak için kullanabilirsiniz .
Christoffer Hammarström
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.