Git Bisect
Ostatnia aktualizacja
git bisect znajduje commit, który wprowadził błąd, metodą wyszukiwania binarnego. Wskazujesz mu commit na pewno dobry i commit na pewno zły; Git przełącza się na commit w połowie drogi, ty oznaczasz go jako dobry albo zły, a zakres za każdym razem zmniejsza się o połowę. Dzięki temu winny commit znajdziesz w kilku krokach, nawet wśród tysięcy commitów.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git bisect start | Rozpoczyna sesję bisect |
git bisect bad | Oznacza bieżący commit jako zły |
git bisect good <hash> | Oznacza commit, o którym wiesz, że jest dobry |
git bisect good / git bisect bad | Oznacza każdy przetestowany commit |
git bisect run ./test.sh | Automatyzacja: test oznacza każdy krok |
git bisect reset | Kończy bisect i wraca na twoją gałąź |
Przykład krok po kroku
Znajdź commit, który zepsuł build.
| Krok | Polecenie | Wynik |
|---|---|---|
| 1 | git bisect start | Rozpoczęcie wyszukiwania |
| 2 | git bisect bad | Bieżący commit jest zepsuty |
| 3 | git bisect good v1.0 | Ten stary tag działał |
| 4 | Test, potem good/bad | Powtarzaj, aż Git wskaże commit |
Najczęstsze pytania o git bisect
Co robi git bisect?
Przeprowadza wyszukiwanie binarne w historii commitów, żeby znaleźć dokładnie ten commit, który wprowadził błąd. Oznaczasz jeden commit jako dobry, a drugi jako zły; Git raz po raz przełącza się na środek zakresu do przetestowania i za każdym razem zawęża zakres o połowę, aż wskaże pierwszy zły commit.
Jak używać git bisect?
Uruchom
git bisect start, oznacz bieżący, zepsuty stan przez git bisect bad, a działający commit przez git bisect good <hash>. Git przełącza się na commit pośrodku; przetestuj go i uruchom git bisect good albo git bisect bad. Powtarzaj, aż Git poda pierwszy zły commit, a potem uruchom git bisect reset.Czy da się zautomatyzować git bisect?
Tak.
git bisect run <script> uruchamia twój skrypt na każdym kroku. Skrypt powinien kończyć się kodem 0 dla dobrego commita i kodem różnym od zera dla złego (dobrze sprawdzają się tu narzędzia do testów). Git sam przeprowadza wtedy bisect, bez ręcznego oznaczania każdego commita, i na końcu wypisuje winny commit.Jak zakończyć bisect?
Uruchom
git bisect reset, żeby zakończyć sesję i wrócić na gałąź i commit sprzed jej rozpoczęcia. Zrób to niezależnie od tego, czy zły commit się znalazł: polecenie sprząta tymczasowy stan bisect.Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom
git bisect w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia przeglądanie historii.