git bisect nedir? Bir hatayı hangi commit'in getirdiğini nasıl bulursunuz?
Cevap
git bisect, hatanın hangi commit ile ortaya çıktığını binary search ile bulan bir Git komutudur. Bir "iyi" (hatasız) ve bir "kötü" (hatalı) commit verirsiniz; Git aradaki commit'leri ikiye bölerek test etmenizi ister. 1000 commit arasında bile yaklaşık 10 adımda (log2(1000)) suçlu commit bulunur.
Manuel kullanım
git bisect start
git bisect bad # şu anki commit hatalı
git bisect good v2.3.0 # bu sürümde hata yoktu
# Git ortadaki bir commit'e geçer; uygulamayı test edin:
git bisect good # bu commit'te hata yok
git bisect bad # bu commit'te hata var
# ... birkaç adım sonra:
# "a1b2c3d is the first bad commit"
git bisect reset # başlangıçtaki dala geri dönOtomatik kullanım
Hatayı yeniden üreten bir test veya script varsa, bisect tamamen otomatik çalışır. Script 0 dönerse commit iyi, 1-127 (125 hariç) dönerse kötü sayılır; 125 ise "bu commit test edilemez, atla" demektir.
git bisect start HEAD v2.3.0
git bisect run npm test -- tests/checkout.test.tsİpuçları
- Derlenmeyen veya test edilemeyen bir commit'e denk gelirseniz
git bisect skipkullanın. - Küçük ve atomik commit'ler bisect'i çok daha faydalı yapar; 2000 satırlık bir "fix stuff" commit'ini bulmak sorunu hâlâ çözmez.
- Squash merge kullanılan repolarda bisect PR seviyesinde sonuç verir.
- Hata performans gerilemesi gibi ölçüme dayalıysa, eşik kontrolü yapan bir script ile
bisect runkullanılabilir. git bisect logile yapılan adımları kaydedipgit bisect replayile tekrarlayabilirsiniz.
İlgili Git soruları
- git merge ile git rebase arasındaki fark nedir?
- git reset ile git revert arasındaki fark nedir?
- İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?
- Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?
- git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?
- Merge conflict nedir ve nasıl çözülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.