`git bisect` - мощный инструмент в Git, предназначенный для поиска коммита, который вызвал появление бага или изменение в коде. Он использует алгоритм бинарного поиска (binary search), что позволяет быстро найти виновный коммит в истории репозитория.
Принцип работы:
- Инициализация: Вы запускаете `git bisect start`.
- Определение "хорошего" коммита: Вы указываете коммит, который *точно* не содержит ошибку (например, старая версия, в которой все работало) с помощью `git bisect good `.
- Определение "плохого" коммита: Вы указываете коммит, который *точно* содержит ошибку (например, текущая версия, где вы наблюдаете проблему) с помощью `git bisect bad `.
- Бинарный поиск: Git автоматически переключает вас на коммит, находящийся посередине между "хорошим" и "плохим".
- Тестирование: Вы проверяете, присутствует ли ошибка в текущем коммите. Это может быть ручное тестирование или автоматизированный скрипт.
- Пометка коммита:
- Если ошибка *есть*, вы помечаете коммит как "плохой" с помощью `git bisect bad`.
- Если ошибки *нет*, вы помечаете коммит как "хороший" с помощью `git bisect good`.
- Повторение: Git снова переключает вас на коммит посередине оставшегося диапазона. Шаги 5 и 6 повторяются, пока не останется только один коммит между "хорошим" и "плохим".
- Идентификация виновника: Git сообщит вам коммит, который вызвал появление ошибки.
- Завершение: Вы завершаете процесс с помощью `git bisect reset`, чтобы вернуться к исходной ветке.
Пример использования:
git bisect start
git bisect good v1.0 # Коммит версии 1.0, все работало
git bisect bad v2.0 # Коммит версии 2.0, есть ошибка
# Git переключает на коммит X
# Проверяем коммит X...
# Если есть ошибка:
git bisect bad
# Если нет ошибки:
git bisect good
# (Повторяется до тех пор, пока не останется один коммит)
git bisect reset # Возвращаемся к исходной ветке
Автоматизация тестирования:
`git bisect` поддерживает автоматизированное тестирование с помощью скриптов. Можно передать скрипт команде `git bisect run