Git rebase ne zaman çakışır?
Bu forumda, progit'te, Youtube'da ve bazı rastgele bloglarda yeniden destek almak için birkaç gönderi okudum.
Bu konuyu sonuçlandırmanın en genel şekli:
- A - B - C Master
\ D - E Topic
ve gerçekleştiriyorum:
git checkout Topic
git rebase Master
İdeal olarak şöyle olur:
- A - B - C - D' - E' Master, Topic
Ancak 2 endişe:
- D '= D, E' = E mi?
- Git rebase çakışması nedir?
İlk endişe ve bu yazı ile ilgili olarak ,
- Rebase, D ve E'de ve her şeyden önce karmaşık girdilerle birleşiyor.
Örneğin, D'ye gittiğinde, gönderiye göre ve haklıysam
- HEAD C'ye ayrıldı
- Git, A'dan D'ye ve A'dan C'ye olan değişiklikleri karşılaştırır
- Birleştirmeden sonra git, D ', D ve E'yi karşılaştırır
Ve bu beni en çok şaşırtan şey. Neden 2'den fazla kaydetme içeren birleştirme? Ayrıca, bir çatışma nasıl ortaya çıkıyor?
DÜZENLE:
Bazı komutları çalıştırın, lütfen aşağıdakilere bakın:
git init
Random.txt İçeriği Oluşturuldu: Ana 1
git add Random.txt
git commit -m "Master 1"
Yeni şube oluştur
git checkout -b rebase_conflict
Random.txt İçeriğini Değiştirin: 1
git add Random.txt
git commit -m "Conflict 1"
Rastgele Değiştir. txt İçeriği: 2
git add Random.txt
git commit -m "Conflict 1"
Ustaya geç
git checkout master
Random.txt içeriğini değiştirin: Ana 2
git add Random.txt
git commit -m "Master 2"
Şubeyi değiştir ve yeniden taban oluştur
git checkout rebase_conflict
git rebase master
Çakışma hatası al Random.txt İçeriğini Değiştir: 1
git add Random.txt
git rebase --continue
Bu noktada başka bir yeniden taban çatışması bekliyorum çünkü
-- Master 1 -- Master 2
\ -- Conflict 1 -- Conflict 2
İlk yeniden düzenlemeden sonra
-- Master 1 -- Master 2 -- Conflict 1'
\ -- Conflict 1 -- Conflict 2
Bu aşamada, Conflict 1 'üzerine yeni bir taahhüt bekliyorum. Anlaşmazlık 2 ve Anlaşmazlık 1 'arasında bir birleştirme anlaşmazlığı yok mu?
Çünkü Çakışma 1 'Random.txt içeriği: 1, oysa
Çakışma 2 Random.txt içeriği: 2
Aynı çizgiyi değiştirirler, değil mi?
Yanıtlar
Yukarıdaki örneğinizde birleştirme veya yeniden bağlama, birleştirme çakışmalarına neden olabilir. Sadece birinin veya diğerinin de çatışması olabilir. Yeniden düzenlemenin ne yaptığını anlamak için, yeniden oluşturduktan Topicsonra neye benzeyeceğini gösteren aşağıdaki diyagramı inceleyin Master:
Topic: -- A -- B -- C -- D' -- E'
Burada kesme işaretleri Dve Etaahhütlerin yeni tabanına yeniden uygulandığını gösterir Master. Her işlem yeniden uygulandığında, çatışmaları birleştirme şansı vardır. Dolayısıyla, N kaydetmeyi yeniden uygulama durumunda, N sayıda birleştirme çakışması olabilir. Öte yandan, bir birleştirme her zaman en fazla bir dizi birleştirme çatışmasıyla sonuçlanır. Bu sizin endişenizse, yeniden satış yerine birleşmeyi tercih edebilirsiniz.