Kısaca: Git merge conflict sonrası değişiklikleri birleştirme, değişiklik kapsamına ve commit geçmişini koruma ihtiyacına göre merge, rebase ya da cherry-pick ile yapılır. Çakışan dosyaları düzenleyip git add ile stage edin; ardından işlemi tamamlayıp git status ve testlerle sonucu kontrol edin.
Bir dalı başka bir dalla birleştirirken aynı satırların değişmesi, Git’in otomatik seçim yapamadığı bir conflict oluşturur. Çözümden sonra hangi yöntemin kullanılacağı, ekipteki çalışma biçimine ve aktarılacak değişikliklerin kapsamına bağlıdır.
Özellikle paylaşılan dallarda commit geçmişini değiştirmeden ilerlemek, başkalarının işini korur. Kişisel dalda ise geçmişi düzenlemek daha uygun olabilir.
Git merge conflict sonrası değişiklikleri birleştirme için hangi yöntem seçilmeli?
Merge ortak geçmişi korur, rebase commitleri hedef dalın üzerine taşır, cherry-pick ise seçili commitleri aktarır. Seçim, değişikliklerin tamamını mı yoksa yalnızca bir kısmını mı taşıyacağınıza ve dalın paylaşılıp paylaşılmadığına göre yapılır.
| Kriter | Merge | Rebase | Cherry-pick |
|---|---|---|---|
| Commit geçmişi | Dalları birlikte korur | Doğrusal hâle getirir | Yeni commit ekler |
| Değişiklik kapsamı | Dalın tamamı | Dalın commitleri | Seçilen commitler |
| Paylaşılan dal | Genellikle uygun | Riskli olabilir | Seçici aktarım |
| Geçmişi yeniden yazma | Hayır | Evet | Hayır, yeni commit üretir |
| Uygun senaryo | Ortak çalışma | Kişisel dalı düzenleme | Tek bir düzeltmeyi taşıma |
Merge conflict sonrasında merge, rebase veya cherry-pick nasıl uygulanır?
Çakışan satırları çözdükten sonra doğru yöntemi seçmek, commit geçmişini ve ekip çalışmasını etkiler. Dosyalardaki conflict işaretlerini kaldırıp istediğiniz içeriği bırakın, ardından ilgili devam komutunu kullanın.
Merge: iki dalın geçmişini birlikte koruyun
Merge conflict çözümünden sonra git add ile dosyaları stage edip git commit çalıştırın. Merge, ortak ata üzerinden iki dalın geçmişini korur.
- Güçlü yanı: Paylaşılan dalın geçmişini yeniden yazmaz.
- Sınırlaması: Ek bir merge commit’i oluşturabilir.
Rebase: commitleri hedef dalın üzerine taşıyın
Rebase çakışmasını çözüp git add ve ardından git rebase –continue komutunu kullanın. Her conflict aşamasında bu adım gerekebilir.
- Güçlü yanı: Commit geçmişini doğrusal tutar.
- Sınırlaması: Paylaşılan commitleri yeniden yazmak ekip arkadaşlarını etkileyebilir.
Cherry-pick: seçili commitleri aktarın
Cherry-pick conflict çözümünden sonra dosyaları stage edip git cherry-pick –continue komutunu çalıştırın. Yalnızca gereken commit aktarılır.
- Güçlü yanı: Tek bir düzeltmeyi başka dala taşıyabilir.
- Sınırlaması: Bağımlı commitler atlanırsa değişiklik eksik kalabilir.
Hangi durumda hangi birleştirme yöntemini seçmelisiniz?
Git merge conflict sonrası değişiklikleri birleştirme kararını dalın paylaşım durumuna ve taşınacak commitlere göre verin. Dalın tamamı gerekiyorsa merge veya rebase, tek bir bağımsız düzeltme gerekiyorsa cherry-pick seçin.
- Paylaşılan dalda ortak geçmişi korumak istiyorsanız merge kullanın.
- Kişisel dalın commitlerini düzenlemek istiyorsanız rebase seçin.
- Belirli bir commit’i başka dala almak istiyorsanız cherry-pick uygulayın.
Çözümden sonra hangi kontroller yapılmalı?
Conflict çözüldüğünde git status ile tamamlanmamış işlem olup olmadığını, git diff ile değişiklikleri inceleyin. Ardından testleri çalıştırın; hata varsa commit etmeden önce düzenleyin.
Karar Vermeden Önce Dalın Paylaşımını Kontrol Edin
Git merge conflict sonrası değişiklikleri birleştirme seçiminizde önce dalın başkaları tarafından kullanılıp kullanılmadığını belirleyin. Paylaşılan dalda geçmişi korumak çoğu durumda daha güvenlidir; kişisel dalda ise ekip kuralı izin veriyorsa rebase tercih edilebilir.
Ayrıca okuyun: Evde WiFi Şifresi Değiştirme Arayüzüne Giremiyorum
Sıkça Sorulan Sorular
Conflict çözerken yanlış değişikliği seçtiğimi nasıl anlarım?
Yanlış değişiklik seçildiğini, beklenen işlev kaybolduğunda veya git diff çıktısında istenmeyen satırlar kaldığında anlarsınız. Commit etmeden önce dosyayı hedef dalla ve kendi değişikliklerinizle karşılaştırın; mümkünse ilgili testleri de çalıştırın.
Merge conflict sırasında henüz commit etmediğim değişiklikler kaybolur mu?
Çakışma çözmek, commit edilmemiş değişiklikleri kendiliğinden silmez; ancak yanlış düzenleme veya sıfırlama komutu kayba yol açabilir. İşleme başlamadan git status ve git diff ile çalışma ağacını kontrol edin, gerekirse değişiklikleri geçici olarak saklayın.
Paylaşılan bir dalda rebase yapmak hangi riskleri doğurur?
Paylaşılan dalda rebase, mevcut commitlerin kimliklerini değiştirip geçmişi yeniden yazar. Ekip arkadaşlarının aynı commitlere dayanan dalları varsa birleştirme sorunları ve tekrar eden commitler oluşabilir; bu yüzden ekip onayı olmadan paylaşılan dalı rebase etmeyin.