Ответ
git bisect — инструмент для автоматического бинарного поиска по истории коммитов.
Алгоритм работы:
- Запуск процесса:
git bisect start - Отметка текущего (плохого) состояния:
git bisect bad - Указание известного хорошего коммита:
git bisect good <commit-hash> - Git перемещается на коммит посередине. После ручной проверки кода:
- Если баг присутствует:
git bisect bad - Если баг отсутствует:
git bisect good
- Если баг присутствует:
- Процесс повторяется, пока не будет найден первый проблемный коммит.
Пример:
# Начинаем поиск
$ git bisect start
# Текущий коммит содержит баг
$ git bisect bad HEAD
# Коммит abc123 заведомо рабочий
$ git bisect good abc1234
Bisecting: 15 revisions left to test after this (roughly 4 steps)
# ... проверяем код, отмечаем good/bad ...
# Завершаем процесс
$ git bisect reset
Почему это эффективно: Алгоритмическая сложность O(log n) позволяет быстро найти проблему даже в большой истории.