Выбор ответа Middle Git обновлено
Найти коммит, сломавший сборку
Вопрос
Тест падает на main, а месяц назад, на теге v2.3.0, проходил. Между ними около 200 коммитов. Как быстрее всего найти коммит, который сломал тест?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: git bisect: v2.3.0 good, HEAD bad, проверять предложенные. git bisect делает бинарный поиск по истории: каждый шаг отсекает половину диапазона, и 200 коммитов проверяются примерно за 8 шагов.
Варианты ответа
- Смотреть
git log -pи читать все 200 диффов подряд git bisect:v2.3.0good,HEADbad, проверять предложенныеправильный ответgit blameна файл теста, чтобы найти последнюю правку- Откатывать по одному коммиту с конца через
git revert, пока тест не пройдёт
Разбор
git bisect делает бинарный поиск по истории: каждый шаг отсекает половину диапазона, и 200 коммитов проверяются примерно за 8 шагов. Процесс можно автоматизировать: git bisect run npm test.
- Читать все диффы долго, и ошибка может быть неочевидной.
git blameпокажет, кто менял строки теста, а сломать могли код, который тест проверяет.- Revert по одному коммиту медленный и засоряет историю, а для поиска ничего не нужно коммитить.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.