CodeBlanks Logo Icon CodeBlanks

Çatışma durumu

cherry-pick sırasında çıkan çatışmayı çözmeyi öğrenirsin.

Çatışma nedir?

İki commit aynı satırı değiştirdiyse cherry-pick hangi sürümün geçerli olacağını bilemez; buna çatışma (conflict) denir. Dosyada <<<<<<< gibi işaretlerle iki sürüm yan yana durur ve işlem beklemede kalır.

<<<<<<< HEAD
v3
=======
v2
>>>>>>> surum

Bu durumda karar verme sırası sende.

Çözüm ve devam

Çatışmayı çözmek için dosyayı düzenleyip geçerli içeriği bırakır ve fazlalık işaretleri silersin. Sonra git add ile dosyayı işaretler, git cherry-pick --continue ile işlemi tamamlarsın.

git add dosya.txt
git cherry-pick --continue

İşlem böylece biter ve commit oluşur.

Uygulama Çatışmayı çöz ve devam et

dosya.txt oluşturup içine v1 yaz, ekle ve sessizce kaydet. surum adında bir dal aç; içeriği v2 yapıp sessizce kaydet, bir önceki dala dönüp içeriği v3 yapıp sessizce kaydet. surum dalındaki commit'i git cherry-pick ile dene; çatışma çıkınca dosyayı v2 olarak çöz, tekrar ekle ve --continue ile tamamla. Sonunda dosya.txt içeriğini yazdır.

Başlangıç kodu

terminal
git init -q
# 1) dosya.txt olustur, icine v1 yaz, ekle ve sessizce kaydet
# 2) surum adinda yeni bir dal ac
# 3) dosya.txt icine v2 yaz, ekle ve sessizce kaydet
# 4) onceki dala don
# 5) dosya.txt icine v3 yaz, ekle ve sessizce kaydet
# 6) surum dalindaki commit'i cherry-pick ile dene
# 7) catisma cikinca dosyayi v2 olarak coz ve tekrar ekle
# 8) cherry-pick islemine devam et
# 9) dosya.txt icerigini yazdir

Örnek çözüm

terminal
git init -q
echo v1 > dosya.txt
git add dosya.txt
git commit -q -m "v1"
git checkout -q -b surum
echo v2 > dosya.txt
git add dosya.txt
git commit -q -m "v2"
git checkout -q -
echo v3 > dosya.txt
git add dosya.txt
git commit -q -m "v3"
git cherry-pick surum >/dev/null 2>&1 || true
echo v2 > dosya.txt
git add dosya.txt
GIT_EDITOR=true git cherry-pick --continue >/dev/null 2>&1
cat dosya.txt

Beklenen çıktı

v2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 cherry-pick sırasında çatışma çıktığında ne olur?

  • Git her zaman kaynak commit'teki sürümü seçer
  • Değişiklikler sessizce atlanır ve hiçbir commit oluşmaz
  • Dal otomatik olarak silinir
  • Dosyada çatışma işaretleri kalır ve işlem beklemede kalır Doğru cevap

Açıklama: Çatışma çıktığında Git karar veremez; dosyada işaretler kalır ve sen çözümü elle yapıp devam edersin.

2 İşlemi tamamla

Soru
git add dosya.txt
git cherry-pick --continue____
Cevap
git add dosya.txt
git cherry-pick --continuecontinue

Açıklama: Çözümden sonra cherry-pick işlemini devam ettiren seçenek --continue'dur; resume, proceed veya next diye bir seçenek yoktur.

3 Çatışma adımları

Kavram Anlamı
conflict Aynı satır iki kez değişmiş
resolve Çatışmayı elle çözersin
git add Çözülmüş dosyayı işaretler
--continue İşlemi tamamlar

Orta seviye bölümündeki tüm dersler

20 Orta seviye finali

  1. Dal yönetimi
  2. Rebase
  3. Çatışma
  4. PR akışı