Özet - Cherry-pick
- Git kursu
- Orta seviye
- Ders 36/82
- 5 dk
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 a1b2c3dBu 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
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
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.txtBeklenen çı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
git checkout -
git cherry-pick a1b2c3d____
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 |