Какой инструмент Git используется для поиска коммита, в котором был внесен баг?

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

Ответ

git bisect — инструмент для автоматического бинарного поиска по истории коммитов.

Алгоритм работы:

  1. Запуск процесса: git bisect start
  2. Отметка текущего (плохого) состояния: git bisect bad
  3. Указание известного хорошего коммита: git bisect good <commit-hash>
  4. Git перемещается на коммит посередине. После ручной проверки кода:
    • Если баг присутствует: git bisect bad
    • Если баг отсутствует: git bisect good
  5. Процесс повторяется, пока не будет найден первый проблемный коммит.

Пример:

# Начинаем поиск
$ 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) позволяет быстро найти проблему даже в большой истории.