Ответ
Да, основным инструментом для этого является git bisect, который использует алгоритм бинарного поиска для автоматического поиска проблемного коммита.
Как работает git bisect:
- Вы указываете один «хороший» коммит (где ошибки нет) и один «плохой» (где ошибка есть).
- Git автоматически переключается на коммит посередине этого диапазона.
- Вы проверяете этот коммит и сообщаете Git, «хороший» он или «плохой». Процесс повторяется, пока не будет найден первый «плохой» коммит.
Пример пошагового использования:
# Запустить процесс бинарного поиска
git bisect start
# Пометить текущий коммит как "плохой" (содержит ошибку)
git bisect bad
# Указать тег или хэш коммита, где ошибки точно не было
git bisect good v2.1.0
# Далее Git будет перемещаться по коммитам. Для каждого проверяйте систему:
# Если ошибка ЕСТЬ в текущем коммите:
git bisect bad
# Если ошибки НЕТ в текущем коммите:
git bisect good
# Когда первый "плохой" коммит найден, Git выведет его хэш.
# Завершить процесс:
git bisect reset
Альтернативные методы поиска:
git log -S <строка>– поиск коммитов, где изменилось количество вхождений заданной строки кода.git blame <файл>– показывает, какой коммит последним менял каждую строку указанного файла.