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.
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.
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.