2012-03-07 12 views
48

Başlığın belirttiği gibi, git merge --squash ve git merge --no-commit arasındaki farklar hakkında gerçekten net değilim.Git birleştirme --squash ve --no-commit arasındaki farklar

git merge Yardım sayfasını anladığım kadarıyla, her iki komut da beni güncel bir çalışma ağacında bırakacaktı, burada düzenleme yapmak ve daha sonra son bir taahhüt (veya birden fazla işlem) yapmak mümkündür.

Birisi bu 2 seçeneğin farklılıklarını açıklayabilir mi? Birini diğerinden ne zaman kullanırdım?

cevap

65
git merge --no-commit 

Bu, normal birleştirme gibidir, ancak birleştirme işlemi oluşturmaz. Bu taahhüt birleşme taahhüdü olacaktır: tarihe baktığınızda, taahhüdünüz normal bir birleşme olarak görünecektir.

git merge --squash 

Bu, değişiklikleri birleştirme işlemi oluşturmadan çalışma ağacınızda birleştirir. Birleştirilmiş değişiklikleri gerçekleştirdiğinizde, şubenizde yeni bir "normal" taahhüt gibi görünecektir: tarihte birleştirme taahhüdü olmadan. Neredeyse bütün değişmiş değişimler için bir kiraz oyunu yaptığınız gibi.

+0

Bu yüzden, bir birleşme taahhüdü tarihte nasıl görünecek? Taahhüt mesajını düzenleyebileceğimden, bunun birleştirme taahhüdü olduğunu nasıl anlarım? – quaylar

+2

@quaylar Birleştirme taahhüdü, birden fazla ebeveynin olması dışında gerçekten özel bir taahhüt değildir. Ebeveynleri örneğin 'git log -parents' (ve 'git log --merges' yalnızca bu tür işlemleri gösterir) ile taahhüt edebilirsiniz. –

+5

@PhilippWendler Öyle ki: Tarihçe bakılarak her zaman bildiğim bir birleşme taahhüdüne sahip olmak, bu taahhüdün bir birleşmenin sonucuydu (bu birleşmenin katkıda bulunduğu şubelerin de tuttuğu bilgi). --squash kullanarak bu işlemin bir birleştirme sonucu olduğunu bilmenin bir yolu yoktur. Bunu doğru anlıyor muyum? – quaylar

İlgili konular