Menu
Coddy logo textTech

Git Rebase vs Merge

Son güncelleme

Hem git merge hem de git rebase, bir daldaki çalışmayı başka bir dala birleştirir. git merge, iki geçmişi bir merge commit'iyle birbirine bağlar ve tam olarak ne olduğunu korur. git rebase, commit'lerini teker teker diğer dalın üzerine yeniden uygular; temiz, doğrusal bir geçmiş üretir, ancak bu süreçte commit'lerini yeniden yazar.

Altın kural: başkalarının önceden çektiği commit'lere asla rebase yapma. İkisini de terminal playground'da dene: tarayıcında gerçek bir kabuk.

Yan yana

Behaviorgit mergegit rebase
Geçmişin şekliBir merge commit'iyle dallananDoğrusal
Commit'leri yeniden yazarHayırEvet
Paylaşılan dallarda güvenliEvetHayır
Tam geçmişi korurEvetHayır
Bir şeyin ne zaman birleştiğini izlemesi kolayEvetDaha zor

Sözdizimi

CommandWhat it does
git merge featurefeature dalını geçerli dala birleştirir
git merge --no-ff featureHer zaman bir merge commit'i oluşturur
git rebase mainGeçerli dalın commit'lerini main üzerine yeniden uygular
git rebase -i HEAD~3Son 3 commit'i etkileşimli olarak düzenler
git rebase --abortDevam eden bir rebase'i iptal eder

Git rebase vs merge SSS

git rebase ile git merge arasındaki fark nedir?
git merge, iki dalın geçmişlerini birleştiren yeni bir merge commit'i oluşturarak onları birleştirir ve ne olduğunun tam kaydını tutar. git rebase ise commit'lerini başka bir dalın üzerine yeniden uygulanacak şekilde taşır; düz bir çizgi halinde geçmiş üretir, ancak bu commit'leri yeni hash'lerle yeniden yazar. Merge geçmişi korur; rebase ise onu daha temiz olması için yeniden yazar.
Ne zaman merge ne zaman rebase kullanmalıyım?
Tamamlanmış bir dalı (özellikle paylaşılan birini) entegre etmek için merge kullan; güvenli ve tahrip edici değildir. Kendi yerel commit'lerini paylaşmadan önce düzenlemek veya bir özellik dalını en güncel main üzerine güncelleyerek temiz bir geçmiş elde etmek için rebase kullan. Birçok ekip yerelde rebase yapar, sonra main'e merge eder.
Rebase'in altın kuralı nedir?
Başkalarının üzerine çalışma temellendirdiği commit'lere asla rebase yapma; genellikle paylaşılan bir dala push ettiğin her şey. Rebase commit'leri yeniden yazdığı için, bunu yapmak diğer herkesi farklılaşmış bir geçmişi uzlaştırmaya zorlar. Yerel, push edilmemiş commit'lerde serbestçe rebase yap; halihazırda herkese açık olan her şey için merge (veya revert) kullan.
Rebase mi merge mi daha az çakışmaya neden olur?
İkisi de çakışmaları önlemez, ancak onları farklı şekilde ortaya çıkarır. Bir merge tüm çakışmaları merge commit'inde tek seferde çözer. Bir rebase, her commit yeniden uygulandıkça çakışmaları commit commit çözmeni isteyebilir. Toplam iş benzerdir; rebase sadece onu zamana yayar.
Bunu çevrimiçi olarak pratik edebilir miyim?
Evet. git merge ve git rebase'i tarayıcındaki gerçek bir kabukta çalıştırmak için terminal playground'ı aç; kurulacak hiçbir şey yok. Coddy'nin ücretsiz etkileşimli Git kursu da merge ve rebase konularını adım adım ele alıyor.
Coddy programming languages illustration

Coddy ile Git öğren

BAŞLA