Prueba de lo que está a punto de comprometerse en un gancho de pre-confirmación

Internet está absolutamente lleno de respuestas incorrectas y no ideales para esta pregunta. Esto es desafortunado porque usted pensaría que esto sería algo común que querría hacer.

El problema: cuando unpre-commit el gancho se ejecuta, el repositorio podría no estar limpio. Por lo tanto, si ejecutas tus pruebas ingenuamente, no estarán en contra de lo que estás cometiendo, sino la suciedad que se encuentre en tu árbol de trabajo.

Lo obvio es hacergit stash --keep-index --include-untracked al comienzo de lapre-commit ygit pop a la salida. De esa manera estás probando contra el índice (puro), que es lo que queremos.

Desafortunadamente, esto genera marcadores de conflicto de fusión si usasgit add --patch, (especialmente si editas trozos), ya que los contenidos destash@{0} podría no coincidir con el árbol de trabajo después de confirmar.

Otra solución común es clonar el repositorio y ejecutar las pruebas en uno nuevo temporal. Hay dos problemas con eso: uno es que aún no nos hemos comprometido, por lo que no podemos obtener fácilmente una copia del repositorio en el estado que estamos a punto de comprometer (estoy seguro de que hay una manera de hacerlo) , pero no me interesa porque :). En segundo lugar, mis pruebas pueden ser sensibles a la ubicación del directorio de trabajo actual. Por ejemplo, debido a la configuración del entorno local.

Entonces: ¿Cómo puedo restaurar mi árbol de trabajo en cualquier estado en que se encontraba antes de lagit stash --keep-index --include-untracked, sin introducir marcadores de conflicto de fusión, y sin modificar el post-commitHEAD?

Respuestas a la pregunta(4)

Su respuesta a la pregunta