Выбор ответа Middle Git обновлено

Найти коммит, сломавший сборку

Вопрос

Тест падает на main, а месяц назад, на теге v2.3.0, проходил. Между ними около 200 коммитов. Как быстрее всего найти коммит, который сломал тест?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: git bisect: v2.3.0 good, HEAD bad, проверять предложенные. git bisect делает бинарный поиск по истории: каждый шаг отсекает половину диапазона, и 200 коммитов проверяются примерно за 8 шагов.

Варианты ответа

  1. Смотреть git log -p и читать все 200 диффов подряд
  2. git bisect: v2.3.0 good, HEAD bad, проверять предложенныеправильный ответ
  3. git blame на файл теста, чтобы найти последнюю правку
  4. Откатывать по одному коммиту с конца через git revert, пока тест не пройдёт

Разбор

git bisect делает бинарный поиск по истории: каждый шаг отсекает половину диапазона, и 200 коммитов проверяются примерно за 8 шагов. Процесс можно автоматизировать: git bisect run npm test.

  • Читать все диффы долго, и ошибка может быть неочевидной.
  • git blame покажет, кто менял строки теста, а сломать могли код, который тест проверяет.
  • Revert по одному коммиту медленный и засоряет историю, а для поиска ничего не нужно коммитить.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.