Encontrando errores en el código con git bisect
Cuando se usa git
en un equipo de trabajo a veces alguien del grupo puede introducir un error en el código que no fue descubierto por los tests ni en la revisión de usuario, y se publica el error al sistema de producción. El momento que se recibe el reporte del error en producción generalmente desde el último despliegue hay varios commits hechos por varios desarrolladores, para encontrar dónde se introdujo el error podemos usar git bisect
.
git bisect
de acuerdo a su documentación nos indica que realiza una búsqueda binaria para encontrar el commit que introdujo un bug. Una búsqueda binaria es un algoritmo en el que se va reduciendo la búsqueda de un commit eliminando posibles commits “buenos” o “malos”.
La búsqueda de nuestro bug de ejemplo puede comenzar de la siguiente manera:
git bisect start # Permite iniciar la búsqueda
git bisect bad # Indica que la versión actual es la incorrecta
git bisect good 4f0dfa72bcdc2ba489629949883392aaa3a4e43b # Es la referencia al último commit correcto puede ser un tag on un branch
Una vez que tenemos al menos un commit bueno y uno malo, git bisect seleccionara un commit en el medio del rango para verificación. Nos mostrará un mensaje que indica el commit que está en el área de trabajo cuantas revisiones quedan por hacer y un estimado de pasos hasta encontrar el error.
Cuando estemos en este paso tenemos que verificar el error existe en ese commit, si no existe, ejecutamos git bisect good
y git bisect nos dará un nuevo commit para probar. En este paso podemos ejecutar tests, probar manualmente, ejecutar algún proceso que verifique si hay no error o simplemente ver el código. Si es un commit malo se ejecuta git bisect bad
hasta que git bisect indique el mensaje que un commit es el primer bad commit (first bad commit
).
Al final de la sesión de trabajo se ejecuta git bisect reset
para volver al branch que estuvimos inicialmente.
Hay también una forma automática de verificar si un commit es válido, usando git bisect run your_script arguments
. El script denominado your_script debe retornar un código de salida 0 para marcar un commit como bueno, y un código entre 1 y 127 (exceptuando 125) cuando el commit es malo. El 125 se usa para cuando no se puede probar y lo marca como skipped.
Si hay alguna duda, por favor no duden en suscribirse y responder directamente a mis emails.