git bisect - это мощный инструмент, который помогает найти точный коммит, где была введена ошибка, используя бинарный поиск.
-
Запустите процесс bisect:
git bisect start
-
Отметьте текущий коммит как плохой (содержит ошибку):
git bisect bad
-
Найдите и переключитесь на известный хороший коммит (до появления ошибки):
git log --oneline # найдите хеш хорошего коммита git bisect good <хеш-коммита>
-
Протестируйте текущий коммит:
- Запустите тесты или проверьте, есть ли ошибка
- Если ошибка присутствует, отметьте как плохой:
git bisect bad
- Если ошибки нет, отметьте как хороший:
git bisect good
-
Повторите шаг 4 до тех пор, пока git bisect не найдет проблемный коммит
-
Завершите процесс bisect:
git bisect reset
# Запуск bisect
git bisect start
# Отметить текущий коммит как плохой
git bisect bad
# Отметить коммит двухнедельной давности как хороший
git bisect good abc1234
# Git переключится на коммит между ними
# Протестируйте его, затем отметьте как хороший или плохой
git bisect good # или git bisect bad
# Продолжайте до тех пор, пока не найдете проблемный коммит
# Git сообщит: "abc5678 is the first bad commit"
# Вернитесь к исходной ветке
git bisect reset-
Используйте автоматизированное тестирование: Можно запустить скрипт, который возвращает 0 для хороших коммитов и 1 для плохих:
git bisect run ./test-script.sh
-
Пропускать коммиты: Если коммит нельзя протестировать (например, это merge-коммит), используйте:
git bisect skip
-
Визуализация процесса: Используйте
git bisect logчтобы увидеть, что вы уже сделали -
Остановка: Если хотите остановить процесс bisect, используйте
git bisect reset
Красота git bisect в том, что он эффективно сужает круг поиска проблемного коммита, тестируя примерно половину оставшихся коммитов каждый раз, что делает процесс намного быстрее, чем ручная проверка каждого коммита по отдельности.