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
| Behavior | git merge | git rebase |
|---|---|---|
| Geçmişin şekli | Bir merge commit'iyle dallanan | Doğrusal |
| Commit'leri yeniden yazar | Hayır | Evet |
| Paylaşılan dallarda güvenli | Evet | Hayır |
| Tam geçmişi korur | Evet | Hayır |
| Bir şeyin ne zaman birleştiğini izlemesi kolay | Evet | Daha zor |
Sözdizimi
| Command | What it does |
|---|---|
git merge feature | feature dalını geçerli dala birleştirir |
git merge --no-ff feature | Her zaman bir merge commit'i oluşturur |
git rebase main | Geçerli dalın commit'lerini main üzerine yeniden uygular |
git rebase -i HEAD~3 | Son 3 commit'i etkileşimli olarak düzenler |
git rebase --abort | Devam 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.