Când o aplicație prezintă un bug obscur apărut între ultimele 200 de commit-uri, inspectarea manuală a fiecărei versiuni este o risipă uriașă de timp. git bisect utilizează algoritmul de căutare binară pentru a reduce investigarea la doar 7-8 pași rapizi.
Îi indici lui Git un commit defect (`bad` – de obicei cel curent) și un commit din trecut când totul funcționa impecabil (`good`). Git comută automat depozitul exact la mijlocul intervalului și te invită să testezi.
Dacă bugul este prezent, tastezi `git bisect bad`; dacă funcționează, tastezi `git bisect good`. În câteva secunde, Git izolează commit-ul exact cu autorul, mesajul și modificările care au spart funcționalitatea.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
start |
Inițializează sesiunea de căutare binară a erorilor. |
bad [commit] |
Marchează commit-ul curent (sau specificat) ca fiind defect. |
good [commit] |
Marchează un commit din trecut ca fiind funcțional. |
reset |
Încheie sesiunea de bisect și revine la ramura originală de lucru. |
run |
Automatizează complet căutarea rulând un script de test (ex: `pytest` sau `npm test`). |
Exemple practice și cod
Exemplul 1: Găsirea automată a commit-ului vinovat folosind o suită de teste
Cum se execută `git bisect run` complet automatizat.
$ git bisect start
$ git bisect bad HEAD
$ git bisect good v1.0.0
Bisecting: 64 revisions left to test after this (roughly 6 steps)
# Rulăm automat scriptul de teste unitare la fiecare pas:
$ git bisect run npm test
running npm test...
[Git testează automat la mijlocul intervalului...]
7e9f3b2a1c4d is the first bad commit
Author: Mihai
Date: Thu Oct 15 14:22:10 2026
Refactorizare algoritm calcul TVA
$ git bisect reset
Rezultat & Impact
Identificare matematică sigură a cauzei erorii în mai puțin de 30 de secunde.
Greșeli frecvente și bune practici
- Marcarea eronată a unui commit intermediar ca `good` când acesta nu a fost testat riguros, direcționând căutarea binară pe o ramură falsă.
- Uitarea rulării comenzii `git bisect reset` la final, lăsând depozitul în stare de `HEAD detached`.