Git Merge Conflict Hatası Nasıl Çözülür? Adım Adım Rehber (2025)

14.12.2025 23:03 Haber

Git kullanırken "CONFLICT" hatası mı aldınız? Panik yapmayın! Bu, yazılım geliştirmede en sık karşılaşılan durumlardan biri. Alesta Web olarak Git merge conflict çözümünü (how to fix git merge conflict) adım adım anlatıyoruz. 5 dakikada bu sorunu çözeceksiniz.

Merge Conflict Nedir? (What is a Merge Conflict?)

Git'te merge conflict, iki farklı branch'te aynı dosyanın aynı satırları değiştirildiğinde ortaya çıkar. Git, hangi değişikliği tutacağına karar veremez ve sizden yardım ister. Alesta Web ekibi olarak günde ortalama 3-4 conflict çözüyoruz - bu gayet normal!

Tipik Conflict Mesajı / Typical Conflict Message

$ git merge feature-branch
Auto-merging src/app.js
CONFLICT (content): Merge conflict in src/app.js
Automatic merge failed; fix conflicts and then commit the result.
? Bilgi / Info:

Merge conflict bir hata değil, Git'in normal davranışıdır (normal Git behavior). İki kişi aynı yeri değiştirdiğinde Git, hangisinin doğru olduğunu bilemez ve sizi hakem olarak atar.

Merge Conflict Neden Oluşur? (Why Do Conflicts Occur?)

Alesta Web deneyimlerine göre en yaygın sebepler:

? Conflict Sebepleri / Causes of Conflicts

Sebep (Cause) Açıklama (Description)
Aynı satır değişikliği İki branch aynı satırı farklı şekilde değiştirmiş
Dosya silme/değiştirme Bir branch dosyayı silmiş, diğeri değiştirmiş
Uzun süreli branch Feature branch çok uzun süre main'den ayrı kalmış
Yetersiz iletişim Ekip üyeleri aynı dosya üzerinde çalışmış

Conflict Tespiti (Detecting Conflicts)

Conflict olduğunda dosyalarda özel işaretler görürsünüz:

Conflict İşaretleri / Conflict Markers

// src/app.js dosyası
function selamla(isim) {
<<<<<<< HEAD
    return "Merhaba, " + isim + "!";
=======
    return `Selam ${isim}!`;
>>>>>>> feature-branch
}
⚠️ İşaretlerin Anlamı / Marker Meanings:
  • <<<<<<< HEAD → Şu anki branch'teki değişiklik (your current changes)
  • ======= → İki değişiklik arasındaki ayırıcı (separator)
  • >>>>>>> feature-branch → Merge edilmeye çalışılan branch'teki değişiklik (incoming changes)

Çözüm Adımları (Step-by-Step Resolution)

Alesta Web'in önerdiği 5 adımlı çözüm süreci:

Adım 1: Conflict Olan Dosyaları Bul (Find Conflicted Files)

# Conflict durumunu kontrol et
git status

# Çıktı:
# Unmerged paths:
#   both modified:   src/app.js
#   both modified:   src/utils.js

Adım 2: Dosyayı Aç ve Conflict'i Çöz (Open and Resolve)

// ÖNCE (conflict var)
function selamla(isim) {
<<<<<<< HEAD
    return "Merhaba, " + isim + "!";
=======
    return `Selam ${isim}!`;
>>>>>>> feature-branch
}

// SONRA (conflict çözüldü - istediğinizi seçin veya birleştirin)
function selamla(isim) {
    return `Merhaba, ${isim}!`;  // En iyi çözümü seçtik
}

Adım 3: İşaretleri Kaldır (Remove Markers)

Tüm <<<<<<<, =======, >>>>>>> işaretlerini sildiğinizden emin olun!

Adım 4: Değişiklikleri Stage Et (Stage Changes)

# Çözülen dosyayı stage et
git add src/app.js

# Veya tüm çözülen dosyaları
git add .

Adım 5: Commit Et (Commit the Resolution)

# Merge commit oluştur
git commit -m "Resolve merge conflict in app.js"

# Veya varsayılan mesajla
git commit
✅ Conflict Çözüldü! / Conflict Resolved!

Artık merge tamamlandı. git log ile merge commit'i görebilirsiniz.

VS Code ile Çözüm (Resolve with VS Code)

VS Code, conflict çözümünü çok kolaylaştırır. Alesta Web ekibi genelde bu yöntemi kullanıyor:

VS Code Conflict Arayüzü

Dosyayı VS Code'da açtığınızda şu seçenekleri göreceksiniz:

┌─────────────────────────────────────────────┐
│  Accept Current Change    (Mevcut değişiklik)
│  Accept Incoming Change   (Gelen değişiklik)
│  Accept Both Changes      (İkisini de al)
│  Compare Changes          (Karşılaştır)
└─────────────────────────────────────────────┘
? Alesta Web İpucu:

VS Code'un "Source Control" panelinden (Ctrl+Shift+G) tüm conflict'leri tek tek görebilir ve çözebilirsiniz. Ayrıca git mergetool komutuyla GUI araç da kullanabilirsiniz.

Merge İptal Etme (Aborting a Merge)

Conflict çözmeye hazır değilseniz, merge'i tamamen iptal edebilirsiniz:

Merge Abort Komutu / Abort Command

# Merge'i iptal et ve önceki duruma dön
git merge --abort

# Bu komut:
# - Tüm conflict değişikliklerini geri alır
# - Working directory'yi merge öncesi haline döndürür
# - Sanki hiç merge denemesi olmamış gibi
⚠️ Dikkat / Warning:

git merge --abort sadece merge henüz tamamlanmadıysa çalışır. Commit ettiyseniz farklı yöntemler gerekir (revert veya reset).

Conflict Önleme İpuçları (Prevention Tips)

Alesta Web olarak conflict'leri minimize etmek için şu pratikleri uyguluyoruz:

✅ En İyi Pratikler / Best Practices

  • Sık sık pull yapın: git pull origin main - her gün en az bir kez
  • Küçük commit'ler: Büyük değişiklikler yerine küçük, sık commit'ler
  • Feature branch'leri kısa tutun: Uzun süreli branch = daha fazla conflict
  • Ekip iletişimi: Aynı dosya üzerinde çalışıyorsanız haberleşin
  • Rebase kullanın: Merge yerine git rebase main daha temiz geçmiş sağlar

Günlük Workflow Önerisi / Daily Workflow

# Her sabah işe başlamadan:
git checkout main
git pull origin main
git checkout feature-branch
git merge main  # veya: git rebase main

# Bu sayede conflict'ler küçük ve yönetilebilir kalır

? Kaynaklar ve Referanslar / Sources and References

Bu makalede kullanılan bilgiler aşağıdaki güvenilir kaynaklardan derlenmiştir:

Alesta Web olarak tüm komutları test ettik ve doğruladık.

✅ Conflict Çözüldü! (Problem Solved!)

Git merge conflict'leri korkutucu görünebilir ama aslında çok basit. Alesta Web olarak bu rehberin işinize yaramasını umuyoruz.

Hızlı Özet / Quick Summary:

  • git status ile conflict'leri bul (find conflicts)
  • ✅ Dosyayı aç ve işaretleri kaldır (remove markers)
  • ✅ İstediğin değişikliği seç (choose changes)
  • git add ile stage et (stage files)
  • git commit ile tamamla (commit)
  • ✅ Vazgeçmek için: git merge --abort

Faydalı Linkler / Useful Links:

© 2025 AlestaWeb - Tüm hakları saklıdır.

WM Tools
💫

WebMaster Tools

15 Profesyonel Araç