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ü?
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ü?
Yanıtlar:
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
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).
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 .