¿Una forma más fácil de recorrer el eje de la historia en Git?

Digamos que descubrí un error durante el desarrollo y quiero hacer testings de regresión para ver cuándo se introdujo. Me gustaría poder rebobinar el historial de Git sin riesgo de separar HEAD. Idealmente, también me gustaría evitar el uso de SHA (que es un paso adicional para search y copyr) y utilizar pointers relativos donde actualmente estoy en el eje del historial (tipo de move -1 o move +2 ).

No veo una manera fácil de hacer eso. Bueno, excepto retrocediendo ( git reset --soft HEAD@{1} ). Pero, ¿qué hay de seguir adelante? ¿Tendría que volver al último compromiso y rebobinar de nuevo por diferentes cantidades de confirmaciones? ¿Hay alias que uno podría hacer para tener commands de ayuda y hacer la vida más fácil?

Usted tiene la opción de usar git bisect (como otros le dijeron), o simplemente de git checkout master~N , N es el número de confirmaciones del maestro actual, este es el número que siempre puede incrementar o disminuir. No tengas miedo del estado de "cabeza separada": a pesar de la advertencia aterradora, no hay nada de malo en estar en ese estado, especialmente si no te comprometes. (Siempre puede usar git stash para mover correcciones, si las hay, de esa confirmación al maestro actual).

Restablecer la twig en HEAD@{N} es probablemente una mala idea porque esa syntax se refiere a las inputs de reflog, que no contienen todo el historial, sino solo las sugerencias históricas de la twig actual.

Para eso es exactamente git bisect .

Tenga en count que, como se señala en Hacer git bisect más útil , puede evitar marcar manualmente cada iterador como "bueno" o "malo" ejecutando su testing de regresión, y dejar que git bisect marque la confirmación dependiendo del estado de salida del script:

 prove t/test/that/fails git bisect good prove t/test/that/fails git bisect bad 

No importa cuán maravilloso sea el git bisect , odio la aburrida repetición. Sin embargo, puedes automatizar esto, también. Después de comenzar su bisección y marcar sus compromisos de inicio y final como buenos y malos, puede hacer esto:

 git bisect run prove t/test/that/fails 

Y git bisect felizmente ejecutará la testing por ti y marcará los commit buenos o malos según corresponda, utilizando el código de salida del progtwig. Simplemente siéntate y espera a que termine.
Mucho mejor.