Adında bir şubede açık bir PR'M var feature-b
bu yakında birleştirilecek main
. Ancak, bunu desteklemek için yazdım. feature-a
devam eden şube. Üzerinde çalışmaya devam etmek istiyorum feature-a
ve yaptığım işi kaldıraç feature-b
birleştirilmeden önce main
.
Bu benim yapabileceğim en iyi yolu nedir? Birleşmelerimiz main
ezilmiş, bu yüzden tüm taahhütler feature-b
birleştirildiğinde tek bir taahhüt olarak yeniden yazılır main
. Bu nedenle, rebasing feature-a
üzerinde feature-b
şimdi birleştiğimde gelecekteki çatışma acısına neden olacak feature-a
-e doğru main
çünkü aynı değişiklikler farklı taahhütlerde yapılmış olacaktır.
Yapılan değişiklikleri dahil etmenin en iyi yolu nedir feature-b
in my feature-a
sonunda birleştiğimde gelecekteki acıyı en aza indirirken dallanma feature-a
-e doğru main
?
Güncelleme
Devam ettim ve:
- Yeniden basıldı
feature-a
üzerindefeature-b
- Daha fazla değişiklik yaptı (yalnızca 1 taahhüt)
feature-a
ikenfeature-b
gözden geçiriliyordu - Kabak-birleştirilmiş
feature-b
bir kez daha gerekli değişiklikleri onayladı (öyleydi yanifeature-a
zaten birleştirilmiş tam kod var) - En son çekildi
main
ve rebasedfeature-a
bunun üstüne
Korktuğu gibi git, birkaç dosyanın "her ikisi de değiştirilmiş" veya "her ikisi de eklenmiş"olduğundan şikayet ediyor. Bu tek başına biraz can sıkıcı olurdu, ama düzeltilmesi basit. Bunu inanılmaz derecede kafa karıştırıcı yapan şey - özellikle de herhangi bir zaman geçtiyse-dosyalardaki yorumları birleştirmektir.
Her ikisi de olsa main
ve feature-a
dallar tüm dosyalarda aynı koda sahip, süper sinir bozucu davranışlar alıyorum:
- "Her ikisi de eklenen "dosyalar için" HEAD (Geçerli Değişiklik) "ve"#HASH (commit message) öğesinin üst öğesi " için birleştirme açıklamaları eklenir. Tam olarak aynı olsalar bile birini ya da diğerini seçmek zorunda kalıyorum!
- "Değiştirilmiş" dosyaların, daha kötü olacak. "HEAD (Current Change)" doğru kodu gösterir. Ancak," #HASH (commit message) öğesinin üst öğesi " bölümü kodun yarısını gösterir. Yine, her iki dalın da tüm kodu olmasına rağmen!! Şaka yapmıyorum, "gelen değişikliği" kabul etmek (VS Koduyla etiketlendiği gibi) her iki dalda da bulunan kodu kaldıracaktır!
Bu değişiklikleri hızlı bir şekilde yapmasaydım, umutsuzca kaybolurdum ve git'in bana gösterdiği şey hakkında kafam karışırdı. Bu gerçekten geçmişte birkaç kez oldu ama neyin yanlış gittiğine parmak basamadım. Şimdi bunu yeniden ürettim ve davranışı doğruladım, git'in ne yaptığı ve insanların bu senaryoyla nasıl başa çıktığı konusunda tamamen kafam karıştı.
GÜNCELLEME 2
Tamam, şimdi neden kodu kaldıracağını anladım. Çünkü yaptığım değişiklikler feature-b
birden çok taahhütte bulundular ve bu taahhütler birleştirildiğinde ezildi main
oluştu. Bu hiç şüphesiz acının kaynağı ve neden daha aklı başında bir iş akışı bulmaya çalışıyorum.