git bisect

Depuración

Encontrar el commit que introdujo un error mediante búsqueda binaria


El comando 'git bisect' encuentra el commit que introdujo un error. Marcas un commit como malo (bad, tiene el error) y otro como bueno (good, no lo tiene); git extrae el commit del medio, lo pruebas y respondes good o bad, y git vuelve a dividir los sospechosos a la mitad hasta que solo queda uno. Incluso mil commits solo necesitan unas diez pruebas. git bisect reset te devuelve a donde empezaste.

Sinopsis

git bisect start [<bad> [<good>...]]
git bisect (bad | good) [<rev>...]
git bisect skip [<rev>...]
git bisect reset
git bisect log
git bisect run <cmd>...
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Opciones

Haz clic en una opción para desplegarla

Principiante (4)

Inicia una sesión; opcionalmente indica directamente el commit malo y luego los buenos.

RecomendadoAhórrate dos comandos: indica bad y good a la vez

Ejemplo

git bisect start HEAD v1.0

El commit actual no se puede probar; elige otro.

Cuando haga faltaSeguir adelante cuando un commit no se puede probar

Ejemplo

git bisect skip

Muestra cada comando y respuesta de la sesión actual.

Cuando haga faltaRevisar o repetir una sesión de bisect

Ejemplo

git bisect log

Termina la sesión y vuelve a la rama desde la que empezaste.

RecomendadoTermina siempre una sesión de bisect con él

Ejemplo

git bisect reset

Avanzado (1)

Ejecuta un comando en cada candidato: código de salida 0 = bueno, 1–127 = malo, 125 = saltar.

RecomendadoBisect totalmente automático con un script de pruebas

Ejemplo

git bisect run npm test

Elegir la opción adecuada

Pruebas necesarias

La búsqueda binaria divide a la mitad los sospechosos cada vez

Comandopruebas de bisect
10 commitsunas 4
100 commitsunas 7
1000 commitsunas 10

Ejemplos

Iniciar una sesión

git bisect start

Empieza la búsqueda.


Marcar commits

git bisect bad && git bisect good v1.0

El commit actual es malo, v1.0 era bueno.


Automatizar

git bisect run npm test

Deja que un script de pruebas responda por ti.


Terminar

git bisect reset

Vuelta a tu rama.

Ejemplos de flujos de trabajo

1
git bisect start HEAD v1.0

Malo ahora, bueno en v1.0

2
git bisect good / git bisect bad

Probar cada commit que extrae git

3
git bisect reset

Vuelta a tu rama

4
git revert <first-bad>

Deshacer al culpable

Solución de problemas

You need to start by "git bisect start"

Causa: No hay ninguna sesión en curso

Ejecuta primero git bisect start

Diste una respuesta equivocada

Causa: Todos los pasos siguientes dependen de ella

git bisect log > log.txt, corrige la línea, git bisect reset, git bisect replay log.txt

Consejos y trampas

Buenas prácticas

  • ✓Escribe una prueba automática y usa git bisect run.
  • ✓Termina siempre con git bisect reset.

Errores comunes

  • ✗Responder mal una sola vez — todos los pasos siguientes serán erróneos (compruébalo con git bisect log).
  • ✗Olvidar git bisect reset y seguir trabajando en un HEAD separado.
  • ✗Empezar con cambios sin confirmar que estorban en los checkouts.

Preguntas frecuentes

A:

Sí: git bisect start --term-old=fast --term-new=slow, p. ej. para encontrar cuándo algo se volvió lento.