GIT Bisect, encontrar el bug de forma rápida

Publicado el 02 agosto 2015 por Jocual

Hoy toca hablar de GIT, en este caso hablaremos de un comando tan útil como desconocido que es git bisect lo que hace este comando es realizar una búsqueda binaria en la historia para encontrar una revisión en particular en la que hemos introducido un bug o un código que queremos localizar.

Imaginemos que hemos iniciado nuestro trabajo en el commit A y hemos realizado varios commits en el medio y ahora estamos en el commit W. Son muchos commits que revisar.

Sin el comando git bisect no quedaría mas remedio que revisar una a una las revisiones hasta ver donde hemos introducido el error/bug. Esta es una búsqueda lineal. Podemos hacerlo mejor haciendo una búsqueda binaria. Esto es lo que el comando git bisect hace por nosotros. Por lo tanto si tenemos que revisar 32 revisiones nos lo haría en un máximo de tan solo 5 pasos ya que log(2)  32 = 5

Por tanto si tenemos que hacer esto con GIT teniendo en cuanta que tenemos los commit A,B,C,D,E…W sería:

$ git bisect start
$ git bisect bad
$ git bisect good A

Después de este comando, git sabe que la revisión actual está mal y que el commit A está bien, a partir de aquí hará checkouts de las revisiones que encuentre en su búsqueda binaria.

Git irá preguntando si el checkout que ha hecho está bien o mal por tanto lanzaríamos nuestro test, ya sea manual, unitario, integración, etc… Si ese test pasa correctamente ejecutaremos:

$ git bisect good

En caso de que nuestro test no pase, ejecutaremos:

$ git bisect bad

Finalmente tras la búsqueda GIT nos dirá algo como esto:

< ... ID del commit en SHA ... > is the first bad commit
< ... Mensaje del commit ... >

Ahora solo tenemos que ver que hemos introducido en el commit y …. ¡voila!, hemos encontrado el bug.

Finalmente hacemos un reset para dejarlo todo como estaba.

git bisect reset