Ana içeriğe geç

Fast-Forward Merge

İleri Sarma Birleştirmesi

Okunuşu
fest forvırd 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/fast-forward-merge

Kısaca

Fast-forward merge, hedef branch'te diğer branch ayrıldığından beri yeni commit yoksa olur; Git merge commit'i oluşturmaz, işaretçiyi yalnızca ileri taşır.

Fast-forward merge nedir?

main'den bir feature branch'i oluşturduğunuzu, üç commit yaptığınızı ve bu arada kimsenin main'e bir şey eklemediğini düşünün. Geçmiş düz bir çizgidir: main, feature'ın hemen gerisindedir. feature'ı main'e birleştirmek hiçbir şeyi birleştirmeyi gerektirmez; bu yüzden Git main işaretçisini son feature commit'ine taşır. Buna fast-forward denir ve sonuç fazladan merge commit'i olmayan doğrusal bir geçmiştir.

Branch oluşturulduktan sonra main ilerlemişse iki çizgi ayrışmıştır ve fast-forward mümkün değildir. Git o zaman ya iki ebeveynli bir merge commit'i oluşturur ya da siz önce branch'i yeni main'in üzerine rebase edersiniz; bu da onu yeniden fast-forward yapılabilir hâle getirir. git pull da yerel branch'iniz ile uzaktaki branch ikisi birden değiştiğinde aynı seçimle karşılaşır.

Ekipler politikalarını bayraklarla seçer. git merge --ff-only, fast-forward yapamıyorsa birleştirmeyi reddeder ve geçmişi kesinlikle doğrusal tutar. git merge --no-ff ise fast-forward mümkün olsa bile her zaman bir merge commit'i oluşturur; böylece her özellik görünür bir commit grubu olarak durur. Barındırma platformları da GitHub'ın merge, squash ve rebase düğmeleri gibi benzer seçimler sunar.

Sık yapılan bir yanlış, fast-forward merge'ün bilgi kaybettirdiğini düşünmektir. Hiçbir commit değiştirilmez ya da silinmez; yalnızca branch işaretçisi hareket eder. Kaybolan şey, commit'lerin ayrı bir branch'te geliştirildiğine dair kayıttır; bazı ekiplerin özellikler için merge commit'lerini, küçük güncellemeler için fast-forward'ları tercih etmesinin nedeni budur.

Önemli noktalar

  • Fast-forward, merge commit'i oluşturmak yerine branch işaretçisini taşır.
  • Yalnızca hedef branch ayrışmamışsa mümkündür.
  • Bir branch'i en son main üzerine rebase etmek onu fast-forward yapılabilir kılar.
  • --ff-only doğrusal geçmişi zorunlu kılar; --no-ff her zaman bir merge commit'i kaydeder.
  • Hiçbir commit kaybolmaz, yalnızca bir feature branch'inin görünür gruplaması kaybolur.

Örnek

Fast-forward ile merge commit'i karşılaştırmasıbash
git switch main
git merge feature
# Updating 41d0e77..9f2c1ab
# Fast-forward              ← main simply moved to feature's last commit

git merge --ff-only hotfix  # merge only if it can fast-forward, otherwise stop
git merge --no-ff feature   # always create a merge commit for the feature

git config --global pull.ff only   # make 'git pull' refuse non-fast-forward merges

Sık sorulan sorular

Git ne zaman fast-forward merge yapar?

Birleştirilen branch'te diğer branch'te olmayan commit yoksa, yani geçmiş ayrışmamışsa. Git o zaman varsayılan olarak merge commit'i oluşturmak yerine işaretçiyi ileri taşır.

--no-ff ne işe yarar?

Fast-forward mümkün olsa bile Git'i bir merge commit'i oluşturmaya zorlar; böylece özelliğin commit'leri geçmişte tek bir merge altında gruplu kalır.

Fast-forward mı merge commit'i mi: hangisi daha iyi?

Bu bir ekip tercihidir. Fast-forward'lar ve rebase'ler okunması ve bisect yapılması kolay, temiz ve doğrusal bir geçmiş verir. Merge commit'leri ise özelliklerin ne zaman ve nasıl entegre edildiğini korur. Birçok ekip küçük değişiklikleri squash ya da rebase eder, büyük özellikler için merge commit'leri kullanır.

İlgili sayfalar

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

Daha fazla

Ayarlar