В этом посте мы узнаем, как использовать git biset для поиска коммита, который внес ошибку в наш репозиторий.

Git — это мощная система контроля версий, которая позволяет разработчикам отслеживать изменения в своей кодовой базе с течением времени. Одной из наиболее важных функций Git является возможность легко найти фиксацию, которая привела к ошибке, с помощью команды git bisect. В этом посте мы рассмотрим, как использовать git bisect для отслеживания фиксации, которая привела к ошибке в вашей кодовой базе.

Что такое git bisect?

git bisect — это команда в Git, которая позволяет быстро найти фиксацию, вызвавшую ошибку в вашей кодовой базе. Это делается путем выполнения бинарного поиска в истории коммитов вашего репозитория, тестирования каждого коммита до тех пор, пока не будет найден первый плохой коммит. Это похоже на игру «угадай число», где вы пытаетесь найти коммит, в котором появилась ошибка, а не число.

Как использовать git bisect?

Чтобы использовать git bisect, вам сначала нужно определить хороший коммит и плохой коммит в вашем репозитории. Хорошая фиксация — это фиксация, в которой известно, что код работает правильно, а плохая фиксация — это фиксация, в которой известно, что код не работает. После того, как вы определили эти коммиты, вы можете запустить процесс git bisect, выполнив следующую команду:

$ git bisect start

Эта команда сообщает Git, что вы хотите запустить процесс git bisect. Затем вам нужно указать Git, какой коммит хороший, а какой плохой. Для этого можно использовать следующие команды:

$ git bisect good <good-commit>
$ git bisect bad <bad-commit>

Эти команды сообщают Git, какой коммит начинает тестирование. После того, как вы определили хорошие и плохие коммиты, вы можете начать бинарный поиск, выполнив следующую команду:

$ git bisect run <test-command>

Эта команда указывает Git запустить двоичный поиск и запускать тестовую команду для каждой фиксации. Команда test должна возвращать ненулевой код выхода, если фиксация плохая, и нулевой код выхода, если фиксация хорошая. Git автоматически проверяет каждую фиксацию и запускает тестовую команду, пока не найдет первую неверную фиксацию.

Как работает git bisect?

Git bisect работает, выполняя бинарный поиск по истории коммитов вашего репозитория. Git начинает с проверки фиксации в середине диапазона между хорошей фиксацией и плохой фиксацией. Затем он запускает тестовую команду, чтобы увидеть, хорошая или плохая фиксация.

Если коммит хороший, Git проверит коммит в середине диапазона между текущим коммитом и плохим коммитом. Если коммит плохой, Git проверит коммит в середине диапазона между хорошим коммитом и текущим коммитом.

Git продолжает этот процесс бинарного поиска, пока не найдет первый плохой коммит. Как только он находит первый плохой коммит, он останавливает бинарный поиск и возвращает хэш коммита.

Пример

Конечно! Допустим, вы работаете над веб-приложением и заметили, что некоторая функция работает неправильно. Вы подозреваете, что ошибка появилась в недавнем коммите, но не знаете, в каком именно. Вот пример того, как использовать git bisect для отслеживания коммита, вызвавшего ошибку.

1. Определите хороший коммит и плохой коммит.

Допустим, коммит abcdefg — это хороший коммит, в котором функция работала правильно, а коммит hijklmn — это плохой коммит, в котором функция не работает.

2. Запустите процесс деления пополам.

В терминале перейдите в свой репозиторий и выполните следующую команду, чтобы запустить процесс git bisect:

git bisect start

3. Отметьте хорошие и плохие коммиты.

Запустите следующие команды, чтобы отметить хорошие и плохие коммиты соответственно:

git bisect good abcdefg 
git bisect bad hijklmn

4. Запустите тестовую команду.

В этом примере предположим, что у вас есть скрипт с именем test-feature.sh, который проверяет, правильно ли работает функция. Выполните следующую команду, чтобы запустить тестовый скрипт:

git bisect run ./test-feature.sh
  1. Git автоматически проверит каждый коммит и запустит для него скрипт test-feature.sh.

5. Определите плохую фиксацию.
Git продолжит бинарный поиск, пока не найдет первую неверную фиксацию. Как только это произойдет, он выведет хэш плохого коммита. В этом примере допустим, что Git идентифицирует фиксацию opqrst как первую неверную фиксацию. Вы можете остановить процесс git bisect, выполнив следующую команду:

git bisect reset

Эта команда вернет ваш репозиторий в исходное состояние и завершит процесс git bisect.

6. Исправить ошибку.

Теперь, когда вы определили плохой коммит, вы можете проверить изменения, внесенные в этот коммит, чтобы определить, что вызвало ошибку. Как только вы определили причину ошибки, вы можете исправить ее и зафиксировать изменения.

git add <fixed-files> 
git commit -m "Fix bug in feature"

Теперь ваша функция должна снова работать правильно!

Использование git bisect может сэкономить вам много времени и усилий при отладке. Это мощный инструмент, который может помочь вам быстро отследить фиксацию, вызвавшую ошибку, чтобы вы могли исправить ее и перейти к другим вещам.