🧬 Rebase & İleri Akış: Cherry-pick ve Geçmişi Yeniden Yaz

Rebase & İleri Akış: Cherry-pick ve: Rebase ve cherry-pick, bir commit'in history'de NEREDE durduğunu yeniden yazan iki zaman makinesidir, ama iki farklı soruya cevap verirler: r

Rebase ve cherry-pick, bir commit'in history'de NEREDE durduğunu yeniden yazan iki zaman makinesidir, ama iki farklı soruya cevap verirler: rebase "bütün branch'im daha sonraki bir noktadan başlasaydı ne olurdu?" diye sorar ve tüm commit'lerini yeni bir temelin üzerine yeniden oynatır; cherry-pick ise "komşularını sürüklemeden SADECE bu tek değişikliği başka yere kopyalayabilir miyim?" diye sorar ve tek bir commit'in diff'ini başka bir yerde yepyeni bir commit olarak uygular. Düşündürücü soru şu: merge zaten varken ve gerçek history'yi koruyorken, bir takım neden commit hash'lerini rebase ile yeniden yazmayı seçsin ki? Çünkü paylaşılan bir branch'te "fix typo" ve "oops" commit'leriyle dolu bir history dürüstlük değil, gürültüdür — rebase, review edilmeden önce hikayeyi anlatılması GEREKTİĞİ gibi, her seferinde tek bir temiz mantıksal commit olarak sunmanı sağlar. Java benzetmesi: rebase, bir versiyon değiştirdikten sonra Gradle/Maven dependency tree'sini yeniden hesaplamak gibidir — her downstream artifact yeni temele göre yeniden hesaplanır, tıpkı temel commit değişince her commit'in hash'inin değişmesi gibi; cherry-pick ise başkasının JAR'ından tek bir derlenmiş class'ı, o JAR'ın geri kalan history'sini çekmeden kendi projene kopyalamaya daha yakındır. Gerçek QA işinde bu yüzden bir hotfix branch'i, test edilmemiş ilgisiz değişiklikler de taşıyabilecek tüm bir devam eden feature branch'ini merge etmek yerine cherry-pick ile SADECE tek bir bug-fix commit'ini içine alır — ve bir takım arkadaşının zaten çektiği bir branch'i rebase etmek, tüm takım açıkça anlaşmadıkça onun local history'sini sessizce bozabilir.

Commit hash'ini bul, sonra hedef branch'e geç

git log feature/hasan --oneline -5 Aslında Neyi Listeler?

git log feature/hasan --oneline -5, SENİN…

git log feature/hasan --oneline -5, SENİN o an bulunduğun branch'i DEĞİL, feature/hasan branch'inin GEÇMİŞİNİ görüntüler — checkout yapmadan BAŞKA bir branch'in commit'lerine BAKABİLİRSİN.

--oneline bayrağı her commit'i…

--oneline bayrağı her commit'i TEK satıra (kısa hash + mesaj) SIKIŞTIRIR, -5 ise SADECE en SON 5 commit'i GÖSTERİR — büyük bir geçmişte hızlıca TARAMA yapmanı sağlar.

Listede görünen d4e5f6a gibi kısa hash…

Listede görünen d4e5f6a gibi kısa hash, o commit'in TAM İÇERİĞİNİN (diff, yazar, mesaj) BENZERSİZ bir PARMAK İZİDİR — bu hash'i bir SONRAKİ adımda cherry-pick'e VERECEKSİN.

git switch hotfix/release-1.4 çalıştırıldığında…

git switch hotfix/release-1.4 çalıştırıldığında AKTİF branch DEĞİŞİR — artık bir SONRAKİ komut (cherry-pick) bu branch'in ÜZERİNE yeni bir commit EKLEYECEK, feature/hasan ETKİLENMEYECEK.

Bu iki adımın SIRASI önemlidir…

Bu iki adımın SIRASI önemlidir: ÖNCE hangi commit'in taşınacağını BUL, SONRA hedef branch'e GEÇ — ters sırada gidersen yanlış branch'teyken hash arama RİSKİ oluşur.

Başka bir branch'teki tek bir commit'i hedeflemenin ilk adımlarını diz.