Ana içeriğe geç

Squash Merge

Okunuşu
skuaş mörc
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/squash-merge

Kısaca

Squash merge, bir branch'teki tüm commit'leri hedef branch üzerinde tek bir yeni commit'te birleştirir; böylece ana geçmiş kısa ve okunması kolay kalır.

Squash merge nedir?

Squash merge, bir feature branch'indeki her commit'i alır ve bunları hedef branch'e, genellikle main'e eklenen tek bir commit'te toplar. Nihai kod normal bir merge ile aynıdır; ancak geçmişte geliştiricinin yol boyunca attığı her 'fix typo' ve 'try again' adımı yerine, özellik başına tek bir derli toplu commit görünür.

Komut satırında git merge --squash feature, branch'in tüm değişikliklerini sanki tek seferde yapılmış gibi stage eder; ardından bunları tek bir mesajla kaydetmek için git commit çalıştırırsınız. Çoğu kod barındırma platformu, pull request'lerde aynı işi yapan bir 'Squash and merge' seçeneği sunar ve commit mesajını genellikle pull request başlığından doldurur. Yeni commit'in yalnızca bir ebeveyni vardır; bu yüzden Git, feature branch'inin merge edildiğini kaydetmez.

Bunu, bir denemenin her taslağını değil son halini teslim etmek gibi düşünün: inceleyenler bitmiş sonucu görür ve geçmiş okunabilir kalır. Birçok ekip küçük ve orta boyutlu pull request'leri varsayılan olarak squash merge eder; çünkü main üzerindeki her commit o zaman incelenmiş tek bir değişikliğe karşılık gelir ve bir özelliği geri almak ya da bir hatanın ne zaman ortaya çıktığını izlemek kolaylaşır.

Squash merge sıklıkla normal merge ve rebase ile karıştırılır. Normal merge, tüm özgün commit'leri korur ve iki ebeveynli bir merge commit ekleyerek ayrıntıyı eksiksiz saklar; rebase ise her commit'i hedef branch'in üzerine yeniden uygular, onları yeniden yazar ama ayrı tutar. Squash'ın başlıca dezavantajı ayrıntı kaybıdır: tek tek commit'ler main'den kaybolur ve Git branch'in merge edildiğini bilmediği için, çalışmaya devam etmek yerine branch'i sonrasında silmelisiniz.

Önemli noktalar

  • Squash merge, bir branch'teki tüm commit'leri hedef branch üzerinde tek bir commit'e dönüştürür.
  • Ana branch geçmişini, özellik ya da pull request başına tek commit ile temiz tutar.
  • Ortaya çıkan commit'in tek ebeveyni olduğundan Git, branch'i merge edilmiş olarak kaydetmez.
  • Tek tek commit'ler ana branch geçmişinde tutulmaz.
  • Sonradan kafa karıştırıcı çakışmalardan kaçınmak için squash merge sonrasında feature branch'ini silin.

Örnek

Bir feature branch'ini komut satırından squash merge etmekbash
# Switch to the branch that should receive the changes
git switch main

# Stage all changes from the feature branch as one combined change
git merge --squash feature/login

# Record them as a single commit
git commit -m "Add login page"

# Delete the branch; -D is needed because Git does not see it as merged
git branch -D feature/login

Sık sorulan sorular

Squash merge ile rebase merge arasındaki fark nedir?

Squash merge, bir branch'teki tüm commit'leri tek bir yeni commit'te birleştirirken, rebase merge her commit'i hedef branch'in üzerine ayrı ayrı yeniden uygular. İkisi de doğrusal bir geçmiş üretir, ancak her commit'i ayrı tutan yalnızca rebase'tir.

Squash merge iyi bir uygulama mıdır?

Her commit'in incelenmiş bir pull request olduğu temiz bir ana branch isteyen ekipler için popüler bir tercihtir. Bir branch'teki her commit özenle hazırlanmış ve kendi başına anlamlıysa daha az uygundur; çünkü bu ayrıntı kaybolur.

Bir squash merge geri alınabilir mi?

Evet. Özelliğin tamamı tek bir commit olarak eklendiği için, bu değişiklikleri tersine çeviren yeni bir commit oluşturan tek bir git revert <commit> ile geri alabilirsiniz.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar