Git имеет команду, чтобы сделать именно то, что вы хотите, git bisect
Найти с помощью бинарного поиска изменения, которые привели к ошибке
В вашем случае вы хотите использовать его как git bisect run /path/to/script
, который будет автоматически проверять коммиты и выполнять проверку с каждым коммитом, чтобы найти bad commit.
Обратите внимание, что скрипт(my_script в приведенном выше примере) должен завершиться с кодом 0, если текущий исходный код исправен, и завершиться с кодом от 1 до 127 (включительно), кроме 125, если текущий исходный код неверен.
Любой другой код завершения прервет процесс деления пополам.Следует отметить, что программа, которая завершается через «exit (-1)», оставляет $?= 255, (см. Страницу руководства выхода (3)), поскольку значение обрезается с помощью «& 0377».
Специальный код выхода 125 следует использовать, когда текущий исходный код не может быть протестирован.Если скрипт завершает работу с этим кодом, текущая ревизия будет пропущена (см. Git bisect skip выше).125 было выбрано в качестве наивысшего разумного значения для использования для этой цели, поскольку 126 и 127 используются оболочками POSIX для сигнализации о конкретном состоянии ошибки (127 - для команды, не найденной, 126 - для команды, найденной, но не исполняемой - эти детали делаютне имеет значения, так как они являются обычными ошибками в скрипте, поскольку речь идет о «bisect run»).
Итак, ваш скрипт скомпилирует ваши исходные коды, запустит ваш пакет модульных тестов и затем выдастсоответствующий код выхода.Раздел примера из bisect manpage хорошо описывает это (включая неработающие сборки, слияния коммитов исправлений и т. Д.)