Git İleri Seviye Teknikler: Rebase, Cherry-Pick ve Bisect
16.10.2026 | 3
Giriş: Temel Git Bilgisinin Ötesine Geçmek
Modern yazılım geliştirme süreçlerinde Git, sadece kod saklama aracı değil; projenin yaşam döngüsünü yöneten kritik bir omurgadır. Çoğumuz git add, git commit ve git push üçlüsüne hâkimiz. Ancak işler karmaşıklaştığında, feature branch'ler biriktiğinde veya prod ortamında gizemli bir bug patlak verdiğinde standart komutlar yetersiz kalır. Bu yazıda, kıdemli bir yazılımcının güncel rutninde en çok ihtiyaç duyduğu ileri seviye Git tekniklerini inceleyeceğiz.
Git Rebase ile Lineer ve Temiz Commit Geçmişi
Merge işlemi, iki branch'i birleştirirken yeni bir 'merge commit' oluşturur ve commit ağacını karmaşıklaştırabilir. Git Rebase ise, çalıştığınız branch'in tabanını (base) hedef branch'in en son commit'ine taşır. Böylece commit geçmişiniz doğrusal (linear) kalır.

Rebase işlemini etkileşimli (interactive) modda çalıştırmak, geçmişinizi yeniden yazmanıza olanak tanır:
git checkout feature-branch
git rebase -i mainBu komutla birlikte açılan terminal editöründe; commit'leri birleştirebilir (squash), sıralarını değiştirebilir veya mesajlarını güncelleyebilirsiniz. Ancak takım çalışmasında, public branch'lerde rebase yaparken --force (veya tercihen --force-with-lease) kullanırken dikkatli olmalısınız.
Git Cherry-Pick ile Hedefli Commit Taşıma
Bazen tüm bir branch'i birleştirmek istemezsiniz; sadece başka bir branch'te yapılmış spesifik bir commit'e ihtiyacınız olur. Tam bu noktada git cherry-pick devreye girer.
Örneğin, bugfix branch'inde çözülen kritik bir hatanın hash değerini bildiğinizi varsayalım:
git checkout main
git cherry-pick a1b2c3d4Mimari Uyarı: Cherry-pick pratik bir hayat kurtarıcıdır, ancak aynı kodu farklı branch'lerde sürekli çoğaltıyorsanız bu bir mimari veya süreç problemine (örn. yanlış branch stratejisi) işaret ediyor olabilir. Dikkatli tüketiniz.
Git Bisect ile İkikollu Arama (Binary Search) ile Hata Avı
Prod ortamında bozulan bir özelliğin hangi commit'ten kaynaklandığını bulmak, yüzlerce commit arasında iğne aramaya benzer. Manuel olarak her commit'i checkout edip test etmek büyük zaman kaybıdır. Git Bisect, bu süreci algoritmanın gücüyle (Binary Search - O(log N)) dakikalara indirir.
Bisect sürecini başlatmak için bozuk olan son durumu ve hatanın henüz olmadığını bildiğiniz eski bir commit'i işaretlemeniz yeterlidir:
git bisect start
git bisect bad # Mevcut bozuk durum
git bisect good v1.0.0 # Hatasız olduğundan emin olunan son etiket veya commitGit size ortadaki bir commit'i checkout edecektir. Projeyi test ettikten sonra duruma göre komutu çalıştırırsınız:
git bisect good
# VEYA
git bisect badGit, hatanın kaynağı olan o tekil commit'i bulana kadar bu ikili bölme işlemine devam eder. İşlem bittiğinde normal çalışma alanınıza dönmek için:
git bisect resetSonuç
Git'in sunduğu bu gelişmiş araçlar, günlük kod yazma hızınızı doğrudan etkiler. Temiz bir commit geçmişi, ekip içi iletişimi ve kod review süreçlerini iyileştirirken; doğru hata avı teknikleri ise stresli prod patlamalarında saniyeler içinde çözüm üretebilmenizi sağlar. Bu komutları lokal geliştirme ortamınızda deneyerek kas hafızanıza kazımanız, kıdemli mühendislik yolculuğunuzda size büyük bir avantaj sağlayacaktır.