Git bisect

#разработка



Недавно, во время разработки, столкнулся с проблемой: проявился достаточно серьезный баг. Куда копать и как его решить — непонятно. В предыдущем релизном билде все хорошо и баг не проявляется.



Первое решение было не самое удачное: я попробовал посмотреть те коммиты, которые были сделаны с предыдущего релизного билда. Но их оказалось около 20, и просмотреть все было невозможно или очень долго.



И тут на помощь мне пришел инструмент, который я не использовал раньше. Называется он git bisect. Я нашел проблемный коммит за 4 шага и примерно 20 минут.



Чтобы его использовать необходимо:

1) Открыть консоль git и перейти в папку проекта.

2) Ввести git checkout <commit hash>, где вместо скобок записать коммит, в котором проявилась проблема.

3) Начать процесс поиска при помощи команды git bisect start.

4) Пометить этот коммит плохим при помощи команды git bisect bad.

5) Пометить коммит, где точно нет проблемы при помощи команды git bisect good <commit hash>.

6) Далее повторяете процесс. Каждый раз git будет переключать в нужный коммит между предыдущим хорошим и плохим коммитом при помощи бинарного поиска. Собираете проект и проверяете, проявляется ли проблема. Если да, то вводите git bisect bad, если же нет, то git bisect good.

7) После завершения поиска вводите git bisect reset, чтобы вернуть репозиторий в начальное состояние.



У вас получится найти проблемный коммит за log n шагов, где n — число коммитов между первыми помеченными коммитами.