Cómo depuro casi todos los problemas que implican un largo historial de cambios, rastreados mediante Git, y descubro cuándo introdujo un error en su código
A veces trabajamos en proyectos durante mucho, mucho tiempo. Podemos crear la versión 1.0 perfecta, luego la lanzamos al público y comenzamos a trabajar en la corrección de errores, luego recibimos solicitudes de funciones y trabajamos para mejorar la aplicación.
En algún momento durante este proceso se produce un error de regresión : un problema inesperado causado por un cambio no relacionado en el código.
Algo no está funcionando como se esperaba, aunque realmente no hayas cambiado esa parte del código recientemente.
O tal vez tocaste un archivo o función tantas veces que no puedes recordar qué cambio pudo haber causado el problema que te informaron.
En cualquier caso, lo primero que hay que hacer es determinar dónde está el fallo .
Si trabajas con un sistema de control de versiones como Git , las cosas son más fáciles. Puedes retroceder en el tiempo y averiguar la confirmación exacta que introdujo el cambio. Cuando trabajas en equipo, esto es importante porque es posible que otra persona haya trabajado en eso y, si causó el error, es posible que no sepas qué hacer, excepto pedirle que lo solucione, porque Git te brinda esta información.
Una forma de hacerlo es verificar manualmente alguna confirmación específica. Por ejemplo, puedes empezar comprobando si la versión de ayer del código base funcionaba bien.
Uso GitHub Desktop , el fantástico cliente Git de GitHub . Es ideal para el uso diario, pero no me permite consultar ni una sola confirmación. Otros clientes sí lo hacen, pero puedes usar la línea de comandos .
Correr
git checkout COMMIT_SHA
donde COMMIT_SHA es la confirmación a la que desea volver. Se verá algo como 5a06d3ca5e7adb6e67
.
Si aún tienes el problema, intenta hacer lo mismo con otro commit del día anterior, y así sucesivamente, hasta que encuentres un commit donde el código funcione. Viajes y turismo
Ahora debes aplicar el principio de divide y vencerás , y elegir un commit en el medio del último que intentaste (y no funcionó) y el que funciona.
Repita el proceso y reduzca a la mitad cada vez que se realicen commits, hasta que identifique el commit que introdujo el problema.
Esto es algo tan común y útil que Git introdujo el bisect
comando para automatizar este proceso.
Empieza por tu última confirmación. Utiliza git checkout your-branch-name
, por ejemplo, git checkout master
si ya has verificado una confirmación anterior.
Luego ejecuta:
git bisect start
Aún no ha ocurrido nada. Debes indicarle a Git una referencia de confirmación incorrecta , donde el código no funciona:
git bisect bad HEAD
y un buen commit, donde el código funcionó:
git bisect good 7f4d976e7540e28c6b0
Git inicia el proceso:
Bisecting: 3 revisions left to test after this (roughly 2 steps)[d18ebf1c7db9a9b44e8facc5ddb3551e641a64e2] fixes #25
Mira, tienes 6 commits entre HEAD y el commit que mencioné como bueno. Git me dice que tengo 2 pasos más hasta que encontremos el commit problemático.
Voy y pruebo el código, luego le digo a Git el resultado: git bisect bad
o git bisect good
dependiendo del éxito.
Repita hasta que encuentre la confirmación incorrecta y luego ejecute git bisect reset
para regresar a la confirmación HEAD.
Git te guiará en esta operación de bisección. Introduces el SHA del commit
Tal vez te puede interesar:
- Introducción a React
- Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
- Cómo cambiar el valor de un nodo DOM
- Cómo comprobar si un elemento DOM tiene una clase
Cómo descubrir un error usando git bisect
Cómo depuro casi todos los problemas que implican un largo historial de cambios, rastreados mediante Git, y descubro cuándo introdujo un error en su código
programar
es
https://aprendeprogramando.es/static/images/programar-como-descubrir-un-error-usando-git-bisect-1895-0.jpg
2024-10-29
Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente