Как в Git найти коммит, который внёс ошибку?

«Как в Git найти коммит, который внёс ошибку?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, основным инструментом для этого является git bisect, который использует алгоритм бинарного поиска для автоматического поиска проблемного коммита.

Как работает git bisect:

  1. Вы указываете один «хороший» коммит (где ошибки нет) и один «плохой» (где ошибка есть).
  2. Git автоматически переключается на коммит посередине этого диапазона.
  3. Вы проверяете этот коммит и сообщаете 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 <файл> – показывает, какой коммит последним менял каждую строку указанного файла.