Çatışma durumu
- Git kursu
- Orta seviye
- Ders 35/82
- 4 dk
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
>>>>>>> surumBu 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
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
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.txtBeklenen çı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
git add dosya.txt
git cherry-pick --continue____
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 |