Merge Conflict
- Türkçe karşılığı
- birleştirme çakışması
- Okunuşu
- mörc konflikt
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Merge çakışması, iki branch bir dosyanın aynı satırlarını değiştirdiği için Git'in otomatik birleştiremediği, sonuca birinin karar vermesi gereken durumdur.
Git'te merge çakışması nedir?
Git, farklı kişiler kodun farklı bölümlerini değiştirdiği sürece işleri otomatik olarak birleştirmekte çok iyidir. Merge çakışması, iki branch aynı dosyanın aynı satırlarını farklı şekillerde değiştirdiğinde ya da bir branch, diğerinin sildiği bir dosyayı düzenlediğinde ortaya çıkar. Git hangi sürümün doğru olduğunu bilemez; bu yüzden merge'i durdurur ve karar vermenizi ister.
Çakışma olduğunda Git, etkilenen bölümleri doğrudan dosyanın içinde işaretler. <<<<<<< ile ======= arasındaki satırlar mevcut branch'inizin sürümünü, ======= ile >>>>>>> arasındaki satırlar ise gelen branch'in sürümünü gösterir. Çakışmayı çözmek için dosyayı doğru nihai içeriğe getirir, işaretleri siler, dosyayı git add ile stage eder ve merge'i git commit ile tamamlarsınız. Çakışmalar bir rebase, bir cherry-pick veya bir git pull sırasında da ortaya çıkabilir.
Merge çakışması, ortak bir belgede aynı cümleyi farklı şekillerde düzelten iki editöre benzer: birinin iki sürümü de okuyup nihai ifadeye karar vermesi gerekir. Çoğu kod editörü, çakışmaları bir tarafı, diğerini ya da her ikisini kabul etmek için düğmelerle gösterir. git merge --abort ile her zaman geri çekilip merge öncesi duruma dönebilirsiniz.
Merge çakışması bir hata ya da bir şeyin bozulduğunun işareti değildir; Git'in insandan karar istemesidir. Çakışmalar mantık hatalarından da farklıdır: Git, birleştirildiğinde programı yine de bozan iki değişikliği sorunsuz biçimde merge edebilir; bu yüzden her merge'den sonra testler çalıştırılmalıdır. Branch'leri kısa ömürlü tutmak ve ana branch ile sık senkronize olmak çakışmaları küçük ve çözmesi kolay tutar.
Önemli noktalar
- Merge çakışması, iki branch aynı satırları değiştirdiğinde ya da biri diğerinin sildiği bir dosyayı düzenlediğinde oluşur.
- Git, çakışmaları dosyada
<<<<<<<,=======ve>>>>>>>işaretleriyle belirtir. - Dosyayı düzenleyip işaretleri kaldırarak,
git addçalıştırıp ardından commit ederek çözün. git merge --abortmerge'i iptal eder ve önceki durumu geri getirir.- Küçük ve sık birleştirilen branch'ler daha az ve daha basit çakışmaya yol açar.
Örnek
git merge feature/new-header
# CONFLICT (content): Merge conflict in src/header.html
git status # lists files with unresolved conflicts
# Inside src/header.html, Git has inserted both versions:
# <<<<<<< HEAD
# <h1>Welcome back</h1>
# =======
# <h1>Hello again</h1>
# >>>>>>> feature/new-header
# Edit the file to the final version, remove the markers, then:
git add src/header.html
git commit # completes the mergeSık sorulan sorular
Git'te merge çakışması nasıl çözülür?
Çakışan her dosyayı açın, çakışma işaretleri arasındaki sürümlerden birini seçin ya da bunları birleştirin ve işaretleri silin. Ardından dosyaları git add ile stage edin ve merge'i tamamlamak için git commit çalıştırın.
Çakışması olan bir merge nasıl iptal edilir?
Merge'i durdurmak ve branch'inizi merge başlamadan önceki duruma döndürmek için git merge --abort çalıştırın. Rebase sırasında bunun karşılığı git rebase --abort komutudur.
Merge çakışmalarından nasıl kaçınılır?
Onlardan tamamen kaçınamazsınız, ancak seyrek ve küçük olmalarını sağlayabilirsiniz. Branch'leri kısa ömürlü tutun, ana branch'ten en son değişiklikleri sık sık çekin ve büyük biçimlendirme değişikliklerini özellik geliştirmeyle karıştırmayın.
İlgili sayfalar
- MergeSürüm Kontrolü, s. 29Git'te merge, bir branch'teki değişiklikleri başka bir branch'e katarak ayrı geliştirme hatlarını tek ve ortak bir geçmişte yeniden birleştirir.
- BranchSürüm Kontrolü, s. 2Git'te branch, bir özellik ya da düzeltme üzerinde, birleştirene kadar ana kodu etkilemeden çalışmanızı sağlayan bağımsız bir geliştirme hattıdır.
- RebaseSürüm Kontrolü, s. 33Git'te rebase, bir branch'in commit'lerini başka bir commit'in üzerine yeniden uygular; geçmişi yeniden yazıp merge commit'siz, temiz ve doğrusal kılar.
- GitSürüm Kontrolü, s. 10Git, dosyalardaki değişiklikleri zamanla izleyen ücretsiz, açık kaynaklı dağıtık sürüm kontrol sistemidir; iş birliğini ve hataları geri almayı kolaylaştırır.
- Cherry-pickSürüm Kontrolü, s. 3Git'te cherry-pick, belirli bir commit'in değişikliklerini geldiği branch'in geri kalanını birleştirmeden, mevcut branch'inize yeni bir commit olarak kopyalar.
- Pull RequestSürüm Kontrolü, s. 32Pull request, bir branch'teki değişiklikleri başka bir branch'e birleştirme önerisidir; kod birleşmeden önce ekibe inceleme, tartışma ve test alanı sunar.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin