git bisect, или как быстро найти сломавший всё коммит
- 13 мая 2026
Бывает такая ситуация: функциональность работала неделю назад, а сейчас — нет. За это время в репозитории накопилось сорок коммитов от разных людей. Просматривать каждый по очереди — долго и мучительно.
git bisect решает эту задачу умно: он делает бинарный поиск по истории коммитов. Вы говорите «вот этот коммит рабочий, а вот этот — нет», а Git сам переключает репозиторий на середину диапазона и спрашивает: «Здесь работает?» После нескольких ответов плохой коммит найден.
Работает бинарный поиск: сорок коммитов — шесть вопросов, восемьсот коммитов — десять вопросов.
Как пользоваться
Начинаем сессию:
git bisect start
Помечаем текущее состояние как плохое:
git bisect bad
Помечаем последний известный рабочий коммит как хороший. Можно указать хеш или тег:
git bisect good v1.2.0
Git переключит репозиторий на коммит посередине диапазона. Проверяем — работает или нет — и сообщаем:
git bisect good # если всё работает
git bisect bad # если не работает
Повторяем до тех пор, пока Git не скажет:
a3f8c12 is the first bad commit
Завершаем сессию и возвращаемся к исходному состоянию:
git bisect reset
Попробуйте сами — симуляция поиска
Серые коммиты — непроверенные, зелёные — рабочие, красные — сломанные. Кружок с синей рамкой — текущая проверяемая точка.
Автоматический bisect
Если есть скрипт, который проверяет работоспособность и возвращает 0 при успехе и ненулевой код при ошибке, можно автоматизировать весь процесс:
git bisect start
git bisect bad HEAD
git bisect good v1.2.0
git bisect run npm test
Git будет сам переключаться по коммитам и запускать тесты, пока не найдёт виновника.
Что запомнить
git bisect — бинарный поиск по истории коммитов. Вместо того чтобы проверять коммиты один за другим, он делит диапазон пополам на каждом шаге. Сорок коммитов — шесть проверок. Не забудьте сделать git bisect reset в конце, чтобы вернуться в исходное состояние.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.