Menu
Coddy logo textTech

Git: Commit'leri Birleştirme (Squash)

Son güncelleme

Squash birden fazla commit'i tek bir commit'te birleştirir, böylece "wip", "yazım hatasını düzelt", "asıl şimdi düzelt" gibi dağınık bir commit serisi tek ve temiz bir commit'e dönüşür. Alışılmış araç etkileşimli rebase'tir - git rebase -i - burada birleştireceğin commit'leri işaretlersin. Squash geçmişi yeniden yazdığı için, bunu push'tan önce ya da yalnızca senin üzerinde çalıştığın bir dalda yap.

Bunları terminal playground'da dene - tarayıcında gerçek bir kabuk, kurulacak hiçbir şey yok.

Squash, bir dizi küçük commiti etkileşimli rebase ile tek bir temiz commite katlar.

Sözdizimi

CommandWhat it does
git rebase -i HEAD~3Son 3 commit'i etkileşimli olarak rebase eder
git rebase -i mainmain'den bu yana her commit'i rebase eder
git merge --squash featureMerge sırasında bir dalın commit'lerini tek bir commit'te birleştirir
git reset --soft HEAD~3 && git commitSon 3 commit'i rebase olmadan birleştirir

Etkileşimli rebase komutları

Açılan editörde pick yerine bunlardan birini yaz.

KeywordWhat it does
pickCommit'i olduğu gibi tutar
squash (s)Önceki commit'e katar, mesajları birleştirir
fixup (f)Katar ama bu commit'in mesajını atar
reword (r)Commit'i tutar ama mesajını düzenler

Örnek uygulama

Push'tan önce son üç commit'i tek bir commit'te birleştir.

StepActionResult
1git rebase -i HEAD~3Son 3 commit'i editörde açar
22. ve 3. commit'leri squash olarak ayarlaOnları ilkine katılacak şekilde işaretler
3Kaydet ve birleştirilmiş mesajı düzenleÜç commit tek ve temiz bir commit olur

Git commit birleştirme (squash) SSS

Git'te son N commit'i nasıl birleştiririm?
git rebase -i HEAD~N komutunu çalıştır (örneğin son üç için HEAD~3). Editörde ilk commit'i pick olarak bırak ve geri kalanını squash yap (mesajlarını atmak için fixup). Kaydet, birleştirilmiş commit mesajını düzenle, commit'ler tek bir commit'te toplanır.
squash ile fixup arasındaki fark nedir?
İkisi de bir commit'i öncekine katar. squash commit'in mesajını korur ve bir editörde diğerleriyle birleştirmene izin verir. fixup ise commit'in mesajını tamamen atar, yalnızca önceki commit'in mesajını tutar - son mesajda görmek istemediğin "hata, küçük düzeltme" commit'leri için kullanışlıdır.
Merge yaparken bir dalın tamamını nasıl birleştiririm?
git merge --squash feature kullan, ardından git commit yap. Bu, dalın tüm değişikliklerini stage'lenmiş değişiklikler olarak uygular ve dalın ayrı ayrı commit'lerini getirmeden hedef dalda tek bir commit olarak kaydetmene izin verir. GitHub'ın "Squash and merge" düğmesi de aynı işi yapar.
Etkileşimli rebase olmadan birleştirebilir miyim?
Evet. git reset --soft HEAD~N dalı N commit geri alır ve tüm değişikliklerini stage'lenmiş tutar, ardından tek bir git commit onları tek bir commit olarak kaydeder. Rebase editörünü açmadan en son commit'leri birleştirmenin hızlı bir yoludur.
Bunu çevrimiçi olarak deneyebilir miyim?
Evet. Terminal playground'ı açarak etkileşimli rebase'i tarayıcında gerçek bir kabukta çalıştır - kurulacak hiçbir şey yok. Coddy'nin ücretsiz etkileşimli Git kursu da rebase yapmayı ve geçmişi temizlemeyi adım adım anlatır.
Coddy programming languages illustration

Coddy ile Git öğren

BAŞLA