В этом посте мы узнаем, как использовать 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
- 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
может сэкономить вам много времени и усилий при отладке. Это мощный инструмент, который может помочь вам быстро отследить фиксацию, вызвавшую ошибку, чтобы вы могли исправить ее и перейти к другим вещам.