2010-02-01 21 views
9

Me gusta usar git add --patch (y más recientemente, git add -i) para desentrañar mis commits así como también verificar que lo que estoy confirmando es bueno ir.Eliminando Hunk Interactivamente con git add --patch

De vez en cuando me encuentro con un trozo que podría ser una declaración de registro de errores, una nueva línea adicional (generalmente al borrar la declaración de registro antes mencionada), algo que en realidad preferiría eliminar por completo.

No quiero ponerlo en escena y también me gustaría simplemente eliminar el trozo en cuestión mientras está justo delante de mí (en lugar de volver a mi editor e intentarlo de nuevo). También quiero aplicar el cambio a mi archivo de trabajo.

¿Hay alguna manera de hacerlo?


Lo que he considerado es utilizar la funcionalidad de edición de trozos.

Esto, junto con la sugerencia hash hecha a continuación me da un flujo de trabajo ligeramente mejor que el que tengo ahora.

Acepto que es una violación de la separación de preocupaciones de git add. OTOH sería tan conveniente; P Sueno como mi jefe;)

+1

Actualmente, la respuesta es "no". Sin embargo, sería una buena funcionalidad poder usar add -i y enumerar hunks. por ejemplo, en lugar de sí/no a cada trozo, podría generar una secuencia de parches, y luego la confirmación solicitaría múltiples mensajes de registro. o si tiene una opción como 'etapa/no-etapa/escondite' cada trozo, en lugar de 'etapa/no escenificar' o 'esconder/no esconder' (vía stash -p) –

+0

Sí, creo generalmente 'git add' no pretende ser una forma de editar archivos de árbol de trabajo, aunque tienes razón, sería bueno poder ocuparte de eso mientras estás allí. – Cascabel

+1

Lo que siempre pensé sería genial tener 1-9 disponible como opciones durante un 'add -i'. Al seleccionar '1 'se agregaría el trozo al primer commit, y así sucesivamente. Eso respaldaría el flujo de trabajo mediante el cual podría poner todos los cambios de comentario en '1', esa característica de fizzbuzz en' 2', etc. y trozos que no quiere en '9'. Todo en un pase. Entonces solo descarta el último commit. Tendría que averiguar cómo enviar mensajes de confirmación allí, pero seguro que sería útil. –

Respuesta

5

Mejor que usar el reinicio de CABEZA fuerte, después de confirmar todas sus partes válidas, puede simplemente recuperar el archivo para restablecerlo a lo que está grabado en la rama actual. De esta forma, no afecta a ningún otro archivo.

0

Puedes agregar al índice lo que quieras, confirmar, luego reiniciar HEAD duro, entonces lo que no estaba en el índice se pierde.

+0

Esta no es una solución verdadera. El OP menciona el desenredo de las confirmaciones y, por lo tanto, es probable que tenga otras modificaciones deseables en el árbol de trabajo que un reset/stash mataría. – Cascabel

+0

Es lo que él puede hacer para obtener lo que quiere, no lo que él quiere que sea capaz de hacer, sí. – hash

1

Hay una explicación detallada de por qué git add no hace esto desde el mantenimiento de Git Junio ​​on the Git mailinglist en respuesta a una solicitud de función.

Versión corta de su proceso alternativo:

# start from N-commit worth of change, debug and WIP 
git stash save -p debug ;# stash away only the debugging aid 
# now we have only N-commit worth of change and WIP 
git stash save -p wip ;# stash away WIP 

git add -p ;# prepare the index for the next commit 
git stash save -k ;# save away the changes for later commits 

git commit