Git Merge
Son güncelleme
git merge, başka bir daldaki commit'leri geçerli dalınıza getirir. Geçerli dal ayrışmamışsa, Git bir fast-forward yapar - yalnızca işaretçiyi ileri taşır. Her iki dalda da yeni commit'ler varsa, Git iki geçmişi birbirine bağlayan bir merge commit oluşturur. Rebase'in aksine, merge her iki dalın tam geçmişini korur.
Bunları terminal playground'da deneyin - tarayıcınızda gerçek bir kabuk, kurulacak hiçbir şey yok.
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 oluşturur |
git merge --ff-only feature | Yalnızca fast-forward yapılabiliyorsa birleştirir |
git merge --squash feature | Dalın commit'lerini tek bir commit'te birleştirir |
git merge --abort | Çakışmalı bir birleştirmeyi iptal eder |
Fast-forward ile merge commit karşılaştırması
| Scenario | Fast-forward | Merge commit (--no-ff) |
|---|---|---|
| Yeni bir commit oluşturur | Hayır | Evet |
| Dalın kaydını tutar | Hayır | Evet |
| Ne zaman gerçekleşir | Geçerli dal ayrışmamıştır | Her iki dalda da yeni commit'ler vardır |
Bir birleştirme çakışmasını çözme
Her iki dal da aynı satırları değiştirdiğinde, Git duraklar.
| Step | Command | Result |
|---|---|---|
| 1 | Çakışan dosyaları düzenleyin | Doğru satırları seçin, işaretçileri kaldırın |
| 2 | git add <file> | Çakışmayı çözülmüş olarak işaretler |
| 3 | git commit | Birleştirmeyi tamamlar |
git merge SSS
Git'te bir dalı başka bir dala nasıl birleştiririm?
Birleştirmek istediğiniz dala geçin (örneğin
git switch main), ardından git merge feature komutunu çalıştırın. Git, feature dalındaki commit'leri main dalına birleştirir; ya bir fast-forward ile ya da her iki dal da ayrışmışsa bir merge commit oluşturarak.Fast-forward ile merge commit arasındaki fark nedir?
Fast-forward, diğer dal ayrıldığından beri geçerli dalınız hareket etmediğinde gerçekleşir - Git yalnızca işaretçiyi ileri kaydırır, yeni bir commit oluşturmaz. Merge commit ise her iki dalda da yeni commit'ler olduğunda oluşturulur ve geçmişlerini birbirine bağlar. Her zaman bir merge commit oluşturmak için
--no-ff, fast-forward gerektirmek için --ff-only kullanın.Bir birleştirme çakışmasını nasıl çözerim?
Bir birleştirme çakıştığında, Git etkilenen dosyalardaki çakışan bölümleri
<<<<<<<, ======= ve >>>>>>> işaretçileriyle işaretler. Doğru içeriği korumak ve işaretçileri kaldırmak için her dosyayı düzenleyin, ardından çözülen dosyalara git add yapın ve birleştirmeyi bitirmek için git commit çalıştırın.Bir birleştirmeyi nasıl geri alırım veya iptal ederim?
Birleştirme hâlâ devam ediyorsa (çakışmalar çözülmemişse), iptal etmek ve birleştirme öncesi duruma dönmek için
git merge --abort çalıştırın. Birleştirme yerelde zaten tamamlandıysa, git reset --hard ORIG_HEAD dalı birleştirme öncesi konumuna döndürür (HEAD~1'in aksine, bir fast-forward sonrasında da doğrudur - ancak commit'lenmemiş çalışmayı siler). Birleştirme push edildiyse git revert -m 1 <merge-hash> kullanın.Bunu çevrimiçi olarak deneyebilir miyim?
Evet.
git merge komutunu tarayıcınızda gerçek bir kabukta çalıştırmak için terminal playground'ı açın - kurulacak hiçbir şey yok. Coddy'nin ücretsiz etkileşimli Git kursu da birleştirmeyi ve çakışmaları çözmeyi adım adım kapsar.