git bisect
Trouver le commit qui a introduit un bug par recherche dichotomique
La commande 'git bisect' trouve le commit qui a introduit un bug. Vous marquez un commit mauvais (bad, il a le bug) et un bon (good, il ne l’a pas) ; git extrait le commit du milieu, vous le testez et répondez good ou bad, et git divise encore les suspects par deux jusqu’à ce qu’il n’en reste qu’un. Même mille commits ne demandent qu’une dizaine de tests. git bisect reset vous ramène à votre point de départ.
Synopsis
git bisect start [<bad> [<good>...]]
git bisect (bad | good) [<rev>...]
git bisect skip [<rev>...]
git bisect reset
git bisect log
git bisect run <cmd>...Options
Choisir la bonne option
Tests nécessaires
La recherche dichotomique divise les suspects par deux à chaque fois
| Commande | tests de bisect |
|---|---|
10 commits | environ 4 |
100 commits | environ 7 |
1000 commits | environ 10 |
Exemples
Démarrer une session
git bisect startCommencer la recherche.
Marquer des commits
git bisect bad && git bisect good v1.0Le commit actuel est mauvais, v1.0 était bon.
Automatiser
git bisect run npm testLaisser un script de test répondre à votre place.
Terminer
git bisect resetRetour sur votre branche.
Exemples de workflows
git bisect start HEAD v1.0Mauvais maintenant, bon en v1.0
git bisect good / git bisect badTester chaque commit que git extrait
git bisect resetRetour sur votre branche
git revert <first-bad>Annuler le coupable
Dépannage
You need to start by "git bisect start"
Cause : Aucune session en cours
Lancez d’abord git bisect start
Mauvaise réponse donnée
Cause : Toutes les étapes suivantes en dépendent
git bisect log > log.txt, corrigez la ligne, git bisect reset, git bisect replay log.txt
Astuces et pièges
Bonnes pratiques
- ✓Écrivez un test automatique et utilisez git bisect run.
- ✓Terminez toujours par git bisect reset.
Erreurs fréquentes
- ✗Se tromper de réponse une seule fois — toutes les étapes suivantes sont alors fausses (vérifiez avec git bisect log).
- ✗Oublier git bisect reset et continuer à travailler sur une HEAD détachée.
- ✗Démarrer avec des modifications non committées qui gênent les checkouts.
FAQ
Oui : git bisect start --term-old=fast --term-new=slow, p. ex. pour trouver quand quelque chose est devenu lent.