git bisect

Débogage

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>...
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (4)

Démarrer une session ; on peut donner directement le mauvais commit puis les bons.

RecommandéSautez deux commandes : nommez bad et good d’un coup

Exemple

git bisect start HEAD v1.0

Le commit actuel ne peut pas être testé ; en choisir un autre.

Si nécessairePasser au suivant quand un commit ne peut pas être testé

Exemple

git bisect skip

Afficher chaque commande et réponse de la session en cours.

Si nécessaireRevoir ou rejouer une session bisect

Exemple

git bisect log

Terminer la session et revenir sur la branche de départ.

RecommandéTerminez toujours une session bisect avec

Exemple

git bisect reset

Avancé (1)

Lancer une commande sur chaque candidat : code de sortie 0 = bon, 1–127 = mauvais, 125 = sauter.

RecommandéBisect entièrement automatique avec un script de test

Exemple

git bisect run npm test

Choisir la bonne option

Tests nécessaires

La recherche dichotomique divise les suspects par deux à chaque fois

Commandetests de bisect
10 commitsenviron 4
100 commitsenviron 7
1000 commitsenviron 10

Exemples

Démarrer une session

git bisect start

Commencer la recherche.


Marquer des commits

git bisect bad && git bisect good v1.0

Le commit actuel est mauvais, v1.0 était bon.


Automatiser

git bisect run npm test

Laisser un script de test répondre à votre place.


Terminer

git bisect reset

Retour sur votre branche.

Exemples de workflows

1
git bisect start HEAD v1.0

Mauvais maintenant, bon en v1.0

2
git bisect good / git bisect bad

Tester chaque commit que git extrait

3
git bisect reset

Retour sur votre branche

4
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

A:

Oui : git bisect start --term-old=fast --term-new=slow, p. ex. pour trouver quand quelque chose est devenu lent.