2013-05-26 13 views
66

I (! Bu harika) bir süredir Git Extensions kullanıyorum ama aşağıdaki basit bir cevap bulamadım: Bir taahhüt mesaj yazarkenGit/Git Uzantısı'nda "squash" ve "fixup" arasındaki fark nedir?

Bazen, bir yazım hatası yapmak.

sağ tıklayın taahhüt> Gelişmiş> Fixup üzerinde

enter image description here

Sonra basitçe kontrol taahhüt: Arkadaşım nasıl o (Git genişlemeleri olarak) şu şekilde düzeltmek için bana gösterdi "Değiştir" kutusunu işaretleyin ve mesajımı ve voilamı yeniden yazın! Benim taahhüt mesajım düzeltildi.

Ancak bu diğer seçenek "Squash commit" ... Her zaman ne yaptığını merak ettim ?!

Sorum şu:

birisi basitçe ve Fixup Git/Git genişlemeleri yılında taahhüt kesinleştirme Squash'de arasındaki kesin fark nedir bana açıklayabilir misiniz? enter image description here enter image description here

cevap

85

Ben Git Uzantıları özellikle onunla ne yaptığını bilmiyorum, ama git Rebase otomatik kabak veya düzeltme bir seçenek kabak taahhüt vardır: Bunlar ... "benzer" bana biraz bak! veya fixup! sırasıyla ön ekler,:

--autosquash, --no-autosquash 
     When the commit log message begins with "squash! ..." (or "fixup! 
     ..."), and there is a commit whose title begins with the same ..., 
     automatically modify the todo list of rebase -i so that the commit 
     marked for squashing comes right after the commit to be modified, 
     and change the action of the moved commit from pick to squash (or 
     fixup). 

squash ve Fixup arasındaki fark düzeltme işlemi orijinal iletiyi tutacak oysa rebase sırasında, kabak operasyon, özgün ve kabak kesinleştirme mesajları birleştirmek isteyecektir olmasıdır ve mesajı fixup taahhüdünden atınız. kaydedilmesini bir dizi rebasing zaman

+4

[Rebase] ve squash/fixup hakkında daha fazla bilgiyi [Git docs] 'da (http://git-scm.com/docs/git-rebase) bulabilirsiniz. –

+0

Bu harika bir cevap. Her zaman neden kombinasyon mesajları aldığımı merak ettim. –

39

Basitçe söylemek gerekirse, her biri bir squash olarak işaretlenmiş tamamlama, size pick veya reword işlemek mesajın bir parçası olarak mesajını kullanmak için fırsat verir.

fixup'u kullandığınızda, bu işlemin mesajı atılır. git-rebase doc itibaren

9

:

Eğer birine iki veya daha fazla kaydedilmesini kat komutu "squash" veya "fixup" ile ikinci ve sonraki kaydedilmesini için, "seçme" değiştirmek istiyorsanız

. İşlemlerin farklı yazarları varsa, katlanmış olan taahhüt ilk başvurunun yazarına atfedilecektir. Katlanmış işlem için önerilen taahhüt mesajı, ilk işlemin ve "squash" komutuna sahip olanların taahhüt mesajlarının birleştirilmesidir, ancak "fixup" komutuyla taahhütlerin taahhüt mesajlarını atlar.

0

Git uzantıları ile tinkered oldum ve bir çok taahhütleri bir birine getiremedim.Bunu yapmak için, komut satırından başvurmak zorunda kaldı ve this post faydalı

git rebase -i Head~2 

Bu interaktif rebase bulundu ve aşağıdakilere dikkat edin:

burada
  • ~ 2 istediğiniz taahhüt kaç belirtmektedir Şu anki kafa da dahil olmak üzere bu işlemle ilgili olanları dahil et
  • Aşağıdaki etkileşimli düzenleme penceresini düzenlemeniz, ilk öğeyi "al" olarak bırakmak ve sonraki satırları "squash" ile değiştirmek zorundasınız. Yukarıdaki bağlantıdaki talimatlar, bu opak ise daha nettir.
İlgili konular