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 master
da 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 master
dalında feature
:
A---B---C feature A'--B'--C' feature
/ --rebase--> /
D---E---F---G master D---E---F---G master
Bununla birlikte, git rebase
sadece 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 master
dalı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 master
dalı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 feature
dalda 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 master
edildiğ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 rebase
yalnı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 merge
yerine kullanmak zorunda kalacaksınız . Ve git reflog
geri almak istiyorsanız önceki özellik dal başınızı bulmak için kullanabilirsiniz .