Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Зачем нужна команда git bisect?
git bisect — это команда для поиска коммита, который внёс баг в проект. Она использует бинарный поиск, чтобы найти проблему среди сотен или тысяч коммитов за несколько шагов вместо того, чтобы проверять каждый вручную.
Проблема
Представь ситуацию:
- Неделю назад сайт работал
- Сегодня обнаружили баг
- За неделю было 200 коммитов
- Который из них сломал функцию?
Проверять все 200 вручную долго и скучно. Здесь помогает git bisect.
Как работает
git bisect использует алгоритм бинарного поиска:
- Ты указываешь последний хороший коммит (когда всё ещё работало)
- Ты указываешь плохой коммит (текущий, с багом)
- Git берёт коммит ровно посередине между ними
- Ты проверяешь: работает или нет?
- Основываясь на ответе, git выбирает нужную половину
- Повтор, пока не останется один коммит
Пример
Предположим, 200 коммитов между хорошим и плохим:
Этап 1: проверяет коммит 100 (средина)
Этап 2: проверяет коммит 150 (если баг там) или 75 (если там нормально)
Этап 3: проверяет коммит 175 или 125
Этап 4: проверяет коммит 187 или 137
...
Вместо 200 проверок нужно всего 8 итераций!
Практическое использование
# Начинаем бинарный поиск
git bisect start
# Указываем текущий коммит как плохой
git bisect bad
# Указываем последний известный хороший коммит
git bisect good abc1234
# Git переключится на коммит посередине
# Ты проверяешь: работает ли функция?
# Если баг есть - помечаешь как bad
git bisect bad
# Если работает - помечаешь как good
git bisect good
# Повтор, пока git не найдёт точный коммит
# Когда найден, выходим
git bisect reset
Пример с реальным багом
# Открыли кнопку - не работает
git bisect start
git bisect bad # Текущее состояние (с багом)
git bisect good v1.2.0 # Последняя версия, где работала
# Git переключается, например, на коммит zzz789
# Проверяем кнопку... не работает
git bisect bad
# Переключается на коммит yyy456
# Проверяем кнопку... работает!
git bisect good
# Переключается на коммит xxx123
# Проверяем кнопку... не работает
git bisect bad
# И так далее...
# Через 5-6 итераций git скажет:
# "Первый плохой коммит: abc123 - Refactor button component"
git bisect reset
fehash git show abc123 # Смотрим, что именно сломалось
Автоматизация
Можно передать скрипт, который автоматически проверяет баг:
git bisect run npm test -- --testNamePattern="buttonWorks"
# git bisect будет запускать тест на каждом коммите
# Если выход кода 0 - коммит хороший
# Если выход !=0 - коммит плохой
Другие подкоманды
git bisect reset # Вернуться на исходный коммит
git bisect log # История бинарного поиска
git bisect replay # Повторить предыдущий поиск
Когда использовать
- Баг появился недавно, но неизвестно в каком коммите
- Нужно найти регрессию в функционале
- Нужно откатить ровно один проблемный коммит
- Нужно понять, когда начала глючить фича
Преимущества
Скорость: логарифмическая сложность вместо линейной. Для 1000 коммитов нужно 10 проверок вместо 500.
Точность: найдёшь ровно тот коммит, который сломал функцию.
Простота: не нужны умные сценарии — просто отмечаешь good/bad.
git bisect — незаменимый инструмент для охотников на баги!