Git Birleştirme –no-ff Seçeneği

Git Merge No Ff Option



Git'in kolay birleştirme yeteneği, güçlü yönlerinden biridir. Birleştirme sırasında git, geçerli dalın HEAD öğesinin birleştirmeye çalıştığınız taahhüdün atası olduğunu fark ettiğinde hızlı ileri birleştirme kullanır. Hızlı ileri birleştirmede yeni bir taahhüt yoktur. Git sadece işaretçiyi hareket ettirir. Bu davranış istenmiyorsa, birleştirme için yeni bir taahhüt oluşturmak için no-ff bayrağını kullanabilirsiniz.

Hızlı İleri Sarma Olup Olmadan Birleştirme Nasıl Görünüyor?

Hızlı bir ileri sarmadan sonra git geçmişiniz şöyle görünecektir:







C0 —> C1 —> C2—> C3



Aynı sayıda taahhüt için, hızlı ileri sarma olmadan bir birleştirme geçmişi:







İlk durumda, herhangi bir dallanma olduğuna dair bir gösterge yoktur. İkinci durumda, geçmiş, birleştirmenin nerede gerçekleştiğini belirtmek için bir C4 taahhüdü gösteriyor.

Bir Örnek Üzerinden Yürümek

Bir git deposu oluşturacak, bir dal oluşturacak ve ardından ileri sarmalı ve ileri sarmasız birleştirmeleri deneyeceksiniz.



Bölüm 1: Kurulum

İlk olarak, aşağıdaki adımlarla git deposunu oluşturabilirsiniz:

$ mkdir benim_projem
$ cd projem
$ git init
$ a.txt'e dokunun
$ git add -A
$ git commit -m 'C0: a.txt ekleme'

Şimdi özellikler adında bir dal oluşturalım ve birkaç değişiklik yapalım:

$ git şube özellikleri
$ git ödeme özellikleri
$ dokunma b.txt
$ git add -A
$ git commit -m 'C1: b.txt ekleme'
$ c.txt'e dokunun
$ git add -A
$ git commit -m 'C2: c.txt ekleme'
$ d.txt'ye dokunun
$ git add -A
$ git commit -m 'C3: d.txt ekleme'

Bölüm2: Hızlı İletme İle Birleştir

Ana şubeye geri dönelim ve özellik dalını onunla birleştirelim:

$git ödemeusta
$git mergeözellikleri

Çıktı:

08076fb..9ee88eb güncelleniyor
İleri sar
b.txt | 0
c.txt | 0
d.txt | 0
3 dosya değişti, 0 ekleme(+), 0 silme(-)
100644 b.txt modu oluştur
100644 c.txt modu oluştur
100644 d.txt modu oluştur

Geçmişi kontrol ederseniz şunları görürsünüz:

$ git günlüğü --oneline
9ee88eb C3: d.txt ekleme
c72b92c C2: c.txt ekleme
2e4039e C1: b.txt ekleme
08076fb C0: a.txt ekleme

Bu nedenle, özellikler dalından gelen tüm taahhütler artık ana daldadır. Ana öğede değişiklik yapmaya devam ederseniz, özellikler dalının onunla ne zaman birleştirildiğini bilmenin bir yolu yoktur.

3. Bölüm: Hızlı İletme Olmadan

Yeni bir klasör için Bölüm 1'i tekrarlayın.

Ardından, hızlı ileri sarmadan birleştirmeyi deneyin:

$git ödemeusta
$git merge --hayır-offözellik

Git'inizin varsayılan metin düzenleyicisinde aşağıdakileri açacaktır:

Şubeyi birleştir'özellikleri'
# Lütfen bu birleştirmenin neden gerekli olduğunu açıklamak için bir taahhüt mesajı girin,
# özellikle güncellenmiş bir yukarı akışı bir konu dalında birleştirirse.
#
# '#' ile başlayan satırlar yok sayılır ve boş bir mesaj iptal edilir
# taahhüt.

Yorumları değiştirin. Bu durumda, Merge şube 'özellikleri'nden önce C4: ekleyebilirsiniz. Çıktı şöyle görünmelidir:

'Yinelemeli' strateji tarafından yapılan birleştirme.
b.txt | 0
c.txt | 0
d.txt | 0
3 dosya değişti, 0 ekleme(+), 0 silme(-)
100644 b.txt modu oluştur
100644 c.txt modu oluştur
100644 d.txt modu oluştur

Şimdi geçmişi kontrol ederseniz, aşağıdaki gibi görünmelidir:

$ git günlüğü --oneline
e071527 C4: Şube 'özelliklerini' birleştir
bb79c25 C3: d.txt ekleme
692bd8c C2: c.txt ekleme
a0df62a C1: b.txt ekleme
7575971 C0: a.txt ekleme

Tam olarak aynı değişikliklere sahip olsanız bile, bu birleştirme sürümünün, özellikler dalının ana ile birleştirilmesini belirten ekstra C4 taahhüdüne sahip olduğunu görebilirsiniz.

Çözüm

git merge no-ff bayrağı, daha okunabilir bir geçmiş oluşturmaya yardımcı olur. Birleştirmelerin nerede gerçekleştiğini açıkça gösteren etiketler koymanıza olanak tanır. Hata ayıklama sırasında size zaman ve emek kazandırabilir.

İlerideki çalışma:

Referanslar: