CodeBlanks Logo Icon CodeBlanks

Özet - Cherry-pick

cherry-pick akışını birleştirerek seçici commit taşıma yaparsın.

Seçici commit taşıma akışı

Seçici commit taşıma üç adımdan geçer: taşınacak commit'in hash'ini bulur, hedef dala geçer ve git cherry-pick ile uygularsın. Çatışma çıkarsa dosyayı çözer, git add ile işaretler ve git cherry-pick --continue ile tamamlarsın.

git log --oneline
a1b2c3d ozellik eklendi
7f0c411 temel kayit

git checkout -
git cherry-pick a1b2c3d

Bu akışta yalnızca seçtiğin commit hedef dala taşınır.

Uygulama Seçici commit taşıma

dosya.txt oluşturup içine v1 yaz, ekle ve sessizce kaydet. ozellik dalında dosya.txt içeriğini v2 yap ve ek.txt oluştur (içine ek yaz), ikisini birlikte sessizce kaydet; bu commit'in hash'ini HASH değişkenine al. Bir önceki dala dön, dosya.txt içeriğini v3 yapıp kaydet. HASH commit'ini git cherry-pick ile dene; çatışmayı v3 olarak çöz, tekrar ekle ve --continue ile tamamla. Sonunda dosya.txt ile ek.txt içeriklerini yazdır.

Başlangıç kodu

terminal
git init -q
# 1) dosya.txt olustur, icine v1 yaz, ekle ve sessizce kaydet
# 2) ozellik adinda yeni bir dal ac
# 3) dosya.txt icine v2 yaz ve ek.txt olustur, icine ek yaz
# 4) iki dosyayi birlikte ekle ve sessizce kaydet
# 5) bu commit'in hash'ini HASH degiskenine kaydet
# 6) uc.txt olustur, ekle ve sessizce kaydet
# 7) onceki dala don
# 8) dosya.txt icine v3 yaz, ekle ve sessizce kaydet
# 9) HASH degiskenindeki commit'i cherry-pick ile dene
# 10) catisma cikinca dosyayi v3 olarak coz ve tekrar ekle
# 11) cherry-pick islemine devam et
# 12) dosya.txt ve ek.txt iceriklerini 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 ozellik
echo v2 > dosya.txt
echo ek > ek.txt
git add dosya.txt ek.txt
git commit -q -m "degisiklikler"
HASH=$(git rev-parse HEAD)
echo uc > uc.txt
git add uc.txt
git commit -q -m "uc"
git checkout -q -
echo v3 > dosya.txt
git add dosya.txt
git commit -q -m "v3"
git cherry-pick $HASH >/dev/null 2>&1 || true
echo v3 > dosya.txt
git add dosya.txt
GIT_EDITOR=true git cherry-pick --continue >/dev/null 2>&1
cat dosya.txt
cat ek.txt

Beklenen çıktı

v3
ek

Soru ve cevaplar

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

1 Yalnızca seçtiğin tek commit'i geçerli dala taşımak için hangi komut kullanılır?

  • git stash pop
  • git cherry-pick a1b2c3d Doğru cevap
  • git reset --hard
  • git init

Açıklama: git cherry-pick, hash ile belirlediğin tek commit'i geçerli dala uygular; reset, stash ve init bu işi yapmaz.

2 Hash'i komuta yaz

Soru
git checkout -
git cherry-pick a1b2c3d____
Cevap
git checkout -
git cherry-pick a1b2c3da1b2c3d

Açıklama: Karttaki log çıktısında ozellik eklendi satırının hash'i a1b2c3d'dir; cherry-pick tam olarak bu hash'i ister.

3 Seçici taşıma akışı

Kavram Anlamı
commit_hash Taşınacak commit'i seçer
git cherry-pick Seçili commit'i uygular
conflict Çözüm bekleyen durum
git cherry-pick --continue Çözüm sonrası devam eder

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ışı