Cuando nos enfrentamos a un bug en nuestro código y no sabemos exactamente en qué momento se introdujo, el comando git bisect se convierte en una herramienta imprescindible para localizar el commit problemático de forma rápida y eficiente. Este comando nos permite hacer una búsqueda binaria entre los commits de nuestro repositorio para identificar el punto exacto en el que el error apareció.
Imaginemos que tenemos un historial de commits donde sabemos que en un momento pasado el código funcionaba correctamente, pero en el commit actual el programa falla. Lo que necesitamos es encontrar ese commit específico que introdujo el bug. Para ello, git bisect nos guía preguntándonos si un commit determinado es bueno o malo, es decir, si el código funciona o no en ese punto. Nosotros respondemos con git bisect good o git bisect bad, y el comando descarta automáticamente los commits que no pueden ser el origen del problema, hasta que finalmente nos señala el commit culpable.
Para empezar a usar git bisect, primero iniciamos la sesión con:
git bisect start
Luego, marcamos el commit actual, donde sabemos que el bug está presente, como malo:
git bisect bad
Después, indicamos un commit anterior donde el código funcionaba bien, usando su hash o etiqueta:
git bisect good <hash_del_commit_bueno>
A partir de aquí, Git selecciona un commit intermedio para que lo probemos. Ejecutamos nuestro programa o pruebas para verificar si ese commit es bueno o malo. Por ejemplo, si el programa falla, indicamos:
git bisect bad
Si funciona correctamente, usamos:
git bisect good
Este proceso se repite, con Git eligiendo siempre el commit a mitad de camino entre los buenos y malos, reduciendo el rango de búsqueda de forma eficiente. Así, en lugar de probar todos los commits, solo tendremos que hacer unas pocas comprobaciones, incluso si el historial es muy largo.
Cuando finalmente git bisect encuentra el commit que introdujo el error, podemos salir de la sesión de bisect con:
git bisect reset
Esto nos devuelve al estado original antes de comenzar la búsqueda, y ya podemos investigar en detalle el commit problemático con comandos como git show.
La magia de git bisect radica en su algoritmo de búsqueda binaria, que divide el historial en mitades y descarta grandes bloques de commits en cada paso según si funcionan o no. Esto hace que encontrar el commit culpable sea mucho más rápido que revisar uno por uno.
Aunque la interfaz de git bisect puede parecer un poco compleja al principio, con sus subcomandos y la necesidad de probar manualmente cada commit que nos propone, su utilidad es enorme. Nos ahorra tiempo y esfuerzo, especialmente en proyectos con muchos commits, y nos ayuda a mantener la calidad del código al identificar rápidamente dónde se introdujo un error.
Por eso, vale la pena familiarizarse con este comando y usarlo cuando nos encontremos con bugs difíciles de rastrear. Así, podemos depurar nuestro proyecto de forma más efectiva y evitar horas de frustración buscando a ciegas.