Git Bisect do debugowania
Wykorzystuj `git bisect`, aby sprawnie znaleźć konkretny commit, który wprowadził błąd, oszczędzając cenny czas debugowania.
Git Bisect do debugowania to bezpłatna lekcja DevOps Bootcamp na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Szybsze znajdowanie błędów za pomocą Git
Debugowanie może być trudne. Czasami pojawia się błąd i nie wiadomo, która zmiana go spowodowała.
git bisect to potężne polecenie Git, które pomaga wskazać dokładny commit, wprowadzający błąd. Wykorzystuje algorytm wyszukiwania binarnego, aby szybko zawęzić obszar poszukiwań wśród tysięcy commitów.
Siła wyszukiwania binarnego
Wyobraźmy sobie, że projekt ma 100 commitów, a błąd pojawił się gdzieś między pierwszym a ostatnim. Ręczne sprawdzanie każdego z nich zajęłoby dużo czasu!
git bisect działa jak gra w „zgadnij liczbę”:
- Wskazują Państwo „dobry” commit (w którym nie było błędu).
- Wskazują Państwo „zły” commit (w którym błąd występuje).
- Git wybiera commit mniej więcej ze środka i prosi o jego przetestowanie.
- Oznaczają go Państwo jako „dobry” lub „zły”, a Git zmniejsza przeszukiwany obszar o połowę.
Rozpocznijmy wyszukiwanie!
Aby rozpocząć, należy poinformować Git o rozpoczęciu sesji bisect. To polecenie inicjuje ten proces:
git bisect start
Po rozpoczęciu należy wskazać znany „zły” commit (w którym występuje błąd) oraz znany „dobry” commit (w którym na pewno nie było błędu).
Często „złym” commitem jest bieżący element HEAD, a „dobrym” może być starszy tag wydania lub commit sprzed kilku dni.
Określanie granic wyszukiwania
Po uruchomieniu git bisect należy określić zakres wyszukiwania:
- Zły commit: To commit, w którym na pewno występuje błąd. Należy użyć
git bisect bad <commit-hash>lub po prostugit bisect bad, jeśli jest to bieżący elementHEAD. - Dobry commit: To commit, w którym na pewno NIE występował błąd. Należy użyć
git bisect good <commit-hash>.
Git automatycznie przełączy się następnie na commit znajdujący się w środku tego zakresu.
Testowanie i zawężanie zakresu
Po oznaczeniu dobrego i złego commita Git automatycznie przełączy się na commit znajdujący się w środku zakresu. Zadaniem użytkownika jest przetestowanie kodu w tym commicie.
- Jeśli błąd WYSTĘPUJE, należy wpisać
git bisect bad. - Jeśli błąd NIE WYSTĘPUJE, należy wpisać
git bisect good.
Git wybierze następnie kolejny commit ze środka pozostałego zakresu. Proces należy powtarzać, aż Git znajdzie pierwszy „zły” commit.
Symulowanie wprowadzenia błędu
Wyobraźmy sobie prosty „błąd” w skrypcie. Zasymulujemy historię projektu, w której wprowadzono niewielki błąd.
Oto nasz początkowy „dobry” skrypt:
main.sh
#!/bin/bash
echo "Hello from script!"
sum=0
for i in $(seq 1 3); do
sum=$((sum + i))
done
echo "Sum is: $sum"Ręczny przewodnik po bisect
Załóżmy teraz, że późniejszy commit przypadkowo zmienił pętlę na seq 1 4, powodując nieprawidłową sumę (10 zamiast 6).
Rozpoczęlibyśmy od:
git bisect start
Następnie oznaczylibyśmy bieżący element HEAD (w którym występuje błąd) jako zły:
git bisect bad HEAD
Oraz starszy, działający commit jako dobry:
git bisect good <old_good_commit_hash>
Git będzie następnie prowadzić Państwa przez kolejne commity. Należy uruchamiać ./main.sh, sprawdzać, czy suma wynosi 6 czy 10, a następnie wpisywać odpowiednio git bisect good lub git bisect bad.
Automatyzowanie procesu debugowania
Ręczne testowanie każdego commita może być czasochłonne, jeśli test jest złożony. Polecenie git bisect run pozwala to zautomatyzować!
Należy dostarczyć skrypt, który kończy działanie z kodem:
0(zero), jeśli commit jest dobry.125, jeśli commit należy pominąć.- Dowolną inną wartością różną od zera (np.
1), jeśli commit jest zły.
Git będzie uruchamiać ten skrypt dla każdego testowanego commita, aż znajdzie błąd.
#!/bin/bash
./main.sh | grep "Sum is: 6"
if [ $? -eq 0 ]; then
exit 0 # Good commit
else
exit 1 # Bad commit
fiKończenie wyszukiwania
Gdy git bisect pomyślnie wskaże pierwszy zły commit, wyświetli jego hasz oraz komunikat.
Po znalezieniu przyczyny i zrozumieniu problemu należy koniecznie przywrócić repozytorium do stanu sprzed rozpoczęcia bisect:
git bisect reset
To polecenie przenosi Państwa z powrotem do commita, na którym znajdowali się Państwo przed rozpoczęciem bisect, i usuwa tymczasowy stan bisect.
Sprawdzenie wiedzy o bisect
Uruchomili Państwo właśnie git bisect start, oznaczyli bieżący element HEAD jako zły, a starszy commit jako dobry. Git przełącza się na commit ze środka zakresu.
Uruchamiają Państwo testy i okazuje się, że błąd WYSTĘPUJE w tym środkowym commicie.
Podsumowanie `git bisect`
Gratulacje! Nauczyli się już Państwo korzystać z git bisect:
- To potężne narzędzie do znajdowania dokładnego commita, który wprowadził błąd.
- Wykorzystuje wyszukiwanie binarne, aby działać wydajnie.
- Określają Państwo commity „dobre” (bez błędu) i „złe” (z błędem).
- Proces testowania można zautomatyzować za pomocą
git bisect run <script>. - Należy zawsze pamiętać o uruchomieniu
git bisect reset, aby posprzątać po zakończeniu wyszukiwania!
Często zadawane pytania
Czy lekcja „Git Bisect do debugowania” jest bezpłatna?
Tak — pełny tekst „Git Bisect do debugowania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „Git Bisect do debugowania”?
Wykorzystuj `git bisect`, aby sprawnie znaleźć konkretny commit, który wprowadził błąd, oszczędzając cenny czas debugowania. Ćwiczysz DevOps Bootcamp z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Git Bisect do debugowania”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Git Reflog i odzyskiwanie historii
- Git Bisect do debugowania
- Utrzymanie i porządkowanie repozytorium
- Przepisywanie historii za pomocą git filter-repo