Git'i yıllardır kullanan ekiplerin bile büyük bölümü aynı üç komuta mahkûm: add, commit, push. Oysa Git'in mağazada sakladığı araçlar, kötü bir günün kurtarıcısı olabilecek güçte. Bugün en az bilen üçüne bakıyoruz.

Bisect: Bin Commit İçindeki Suçluyu Yedi Adımda Bulmak

Süreç şöyle işler: "İyi" bilinen bir commit ile "kötü" bir commit arasına geçersiniz. Git, ikili arama algoritmasıyla ikisinin ortasındaki commit'i seçer, test edersiniz, sonucu söylersiniz; av alan yarıya iner. Bin commit'lik bir geçmişte suçlu yedi adımda yakalanır.

git bisect start
git bisect bad main          # hata burada görülüyor
git bisect good v2.1.0       # bu sürümde her şey yolunda
# ... test et, sonra:
git bisect good              # ya da "git bisect bad"
# Bulunduğunda:
git bisect reset

Asıl sihir otomasyonda: git bisect run npm test yazdığınızda Git, testi her adımda kendi çalıştırır ve çıkış koduna göre karar verir. Siz kahvenizi alırsınız. Script sıfırla biterse commit "iyi", sıfırdan farklı biterse "kötü" sayılır; durdurmak için exit 125 döndürmek yeterli.

Reflog: "Git'i Bozdum" Demenin Panzehiri

Kullanıcılar reset --hard atmanın, rebase'i esirgemez biçimde yürütmenin ya da dalı yanlışlıkla silmenin geri dönüşsüz olduğunu sanır. Değil. Git, HEAD işaretçisinin her hareketini en az 90 gün boyunca reflog'da tutar:

git reflog
a1b2c3d HEAD@{0}: reset: moving to a1b2c3d
f4e5d6c HEAD@{1}: commit: feat: ödeme adımı eklendi
9a8b7c1 HEAD@{2}: merge branch 'hotfix'

Yanlışlıkla bir commit'i ezip geçtiyseniz, ilgili satırdaki hash'i kopyalayıp git reset --hard HEAD@{1} demeniz yeterli. Dalı sildiyseniz: git branch kurtarma f4e5d6c. Reflog, bilgisayarınızı yaktıktan sonra külleri geri toplayan aynı sınıf araçtır — belli ki işi baştan yapmak ile sonlanmış işi geri almak arasında büyük fark var.

Stash'in İnce Sanatı

Çoğu kullanıcı git stash ile git stash pop arasında sıkışır. Oysa stash, adı olsun diye duran bir çöp tenekesi değil, yığın (stack) yapısında bir sürükle-bırak sistemidir:

git stash push -m "wip: sepet toplamı yarım"   # mesajlı stash
git stash list
git stash push -k                              # sahneye alınanları koru, kalanını stashta
git stash pop stash@{2}                        # belirli bir sürümü geri yükle
git stash branch deneysel-is                   # stash'i yeni dala taşı

-k (keep-index) bayrağı özellikle kısmi commit akışında hayat kurtarır: sahnede bekleyen dosyalar olduğu gibi kalır, kirli kalanlar bir kenara istiflenir. stash branch ise uzun süredir stashta bekleyen işi otomatik olarak kendi dalına taşıyıp çakışmaları sizin yerinize çözmeyi dener.

Sonuç: Terminalde Vaktin Yarısı. Bu üçü, her gün yazdığınız kodla değil, az kişiye anlatılan kullanım desenleriyle ilgili. Ekibinize bir saat ayırıp bisect run, reflog kurtarma ve stash bayraklarını göstermek; kariyerinizde bir kez tanık olduğunuz "repoyu sildik, her şey gitti" toplantısını sonsuza dek engelleyebilir. Git, sizin kötü gününüz için tasarlanmış bir zaman makinesidir — anahtarları bilmeniz yeterli.