Git rebase ne zaman çakışır?

Sep 28 2020

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:

  1. D '= D, E' = E mi?
  2. Git rebase çakışması nedir?

İlk endişe ve bu yazı ile ilgili olarak ,

  1. 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

  1. HEAD C'ye ayrıldı
  2. Git, A'dan D'ye ve A'dan C'ye olan değişiklikleri karşılaştırır
  3. 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

TimBiegeleisen Sep 28 2020 at 20:27

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.