20 Bisect

Cuando se sabe que un error existe en el código actual pero no existía hace, digamos, cien commits, revisar cada commit uno por uno es lento. git bisect automatiza una búsqueda binaria sobre el historial para encontrar el commit exacto que introdujo el problema.

20.1 Uso interactivo

git bisect start
git bisect bad                 # el commit actual tiene el error
git bisect good v2.0.0         # esta versión anterior no lo tenía

Git elige automáticamente el commit que está justo en el medio del rango y actualiza el directorio de trabajo a ese punto. Se prueba manualmente si el error está presente, y se informa el resultado:

git bisect good   # o
git bisect bad

Git repite el proceso, reduciendo el rango a la mitad cada vez, hasta señalar exactamente el primer commit "malo".

git bisect reset

vuelve al estado original una vez terminado.

20.2 Automatizar con un script

Si existe una forma de comprobar automáticamente si el error está presente (por ejemplo, una prueba que falla), todo el proceso puede automatizarse:

git bisect start HEAD v2.0.0
git bisect run ./probar-error.sh

El script debe terminar con código de salida 0 si el commit es "bueno" y distinto de cero si es "malo" (con la excepción de 125, reservada para indicar que ese commit no se puede probar y debe saltarse). Git ejecuta la búsqueda binaria completa sin intervención manual.