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ön

Otomatik 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 skip kullanı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 run kullanılabilir.
  • git bisect log ile yapılan adımları kaydedip git bisect replay ile tekrarlayabilirsiniz.
  1. git merge ile git rebase arasındaki fark nedir?OrtaGitFull Stack
  2. git reset ile git revert arasındaki fark nedir?OrtaGitFull Stack
  3. İyi bir code review nasıl yapılır? .gitignore'a neler eklenmelidir?KolayGitFull Stack
  4. Interactive rebase ile commit'leri nasıl düzenler ve squash edersiniz?ZorGitFull Stack
  5. git cherry-pick ve git stash ne işe yarar? Hangi durumlarda kullanılır?OrtaGitFull Stack
  6. Merge conflict nedir ve nasıl çözülür?KolayGitFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle