Вы когда-нибудь ловили баг в проекте, который «ещё вчера работал»?
Коммитов — целая гора, глазами не найти. Тут и выручает
git bisect.Это штука, которая делает бинарный поиск по истории. Вы указываете, где баг точно есть (
git bisect bad HEAD), и где его точно не было (git bisect good abc123). Дальше Git сам переключает вас на середину между "плохим" и "хорошим" кодом и говорит: «проверь».
Вы смотрите: баг есть →
git bisect bad, бага нет → git bisect good.И так несколько раз, пока Git не ткнёт пальцем в конкретный коммит: вот тут всё сломалось.
Фишка в том, что даже если между good и bad 100 коммитов, руками проверять придётся не сто, а всего 6–7. Логарифмы в действии 🙂
А если повезло, и баг можно проверить скриптом (например, тест падает с кодом 1) — вообще красота:
git bisect run ./test_bug.sh
Git сам пройдётся по истории и принесёт виновника на блюдечке.
Так что если в следующий раз придётся охотиться за багом — не спешите листать
git log. Пусть git bisect сделает грязную работу 😉