Git Bisect
Ultimo aggiornamento
git bisect trova il commit che ha introdotto un bug con una ricerca binaria. Gli indichi un commit che sai funzionare e uno che sai rotto; lui fa il checkout di un commit a metà strada, tu lo segni come good o bad, e a ogni passo l'intervallo si dimezza. Così individua il colpevole in pochi passaggi anche tra migliaia di commit.
Prova questi comandi nel terminal playground: una vera shell nel tuo browser, senza installare nulla.
Sintassi
| Comando | Cosa fa |
|---|---|
git bisect start | Avvia una sessione di bisect |
git bisect bad | Segna il commit corrente come difettoso |
git bisect good <hash> | Segna un commit che funziona |
git bisect good / git bisect bad | Segna ogni commit testato |
git bisect run ./test.sh | Automatizza: esegue un test per segnare ogni passo |
git bisect reset | Termina il bisect e torna al tuo branch |
Esempio pratico
Trova il commit che ha rotto la build.
| Passo | Comando | Risultato |
|---|---|---|
| 1 | git bisect start | Avvia la ricerca |
| 2 | git bisect bad | Il commit corrente è rotto |
| 3 | git bisect good v1.0 | Questo vecchio tag funzionava |
| 4 | Testa, poi good/bad | Ripeti finché Git non indica il commit |
Domande frequenti su git bisect
Cosa fa git bisect?
Esegue una ricerca binaria nella cronologia dei commit per trovare il commit esatto che ha introdotto un bug. Segni un commit come good e uno come bad; Git fa ripetutamente il checkout del punto intermedio perché tu lo testi, dimezzando ogni volta l'intervallo finché non individua il primo commit difettoso.
Come si usa git bisect?
Esegui
git bisect start, segna lo stato attuale rotto con git bisect bad e un commit funzionante con git bisect good <hash>. Git fa il checkout di un punto intermedio; testalo ed esegui git bisect good o git bisect bad. Ripeti finché Git non indica il primo commit difettoso, poi esegui git bisect reset.Posso automatizzare git bisect?
Sì.
git bisect run <script> esegue il tuo script a ogni passo: lo script deve uscire con 0 per un commit buono e con un valore diverso da zero per uno difettoso (i test runner vanno benissimo). Git allora procede da solo, senza che tu debba segnare ogni commit a mano, e alla fine stampa il commit responsabile.Come termino un bisect?
Esegui
git bisect reset per chiudere la sessione e tornare al branch e al commit su cui eri prima di iniziare. Fallo sia che tu abbia trovato il commit difettoso sia che non l'abbia trovato: ripulisce lo stato temporaneo del bisect.Posso esercitarmi online?
Sì. Apri il terminal playground per eseguire
git bisect in una vera shell nel tuo browser, senza installare nulla. Il corso interattivo gratuito di Git di Coddy spiega anche come esaminare la cronologia passo dopo passo.