git commit patch split git-add

git add interactive



¿Cómo editar Git "agregar parche" hunks/diffs/lines durante la puesta en escena selectiva? (5)

Tengo un archivo fuente donde se han agregado 2 características. Para permitir el "cherry picking", me gustaría comprometerlo en 2 fases: una para cada función. Hasta ahora, en situaciones similares, el uso de git add -p me ha servido bien, para confirmar una función y dejar los archivos locales en su etapa final.

Sin embargo, ahora tengo el problema de que git add -p quiera git add -p un hunk que incluya ediciones para ambas funciones. Aunque las ediciones están en líneas separadas, s (para "dividir") ya no quiere dividir el trozo en trozos más pequeños ...

En resumen: no puedo separar los cambios para las 2 funciones de esta manera. ¿Hay alguna manera de editar manualmente el parche, por ejemplo usando vi, sin cambiar realmente el archivo original?


Al igual que otras personas han dicho, puede usar e para editar el trozo que desea dividir.

Para agregar solo una porción del trozo, puede eliminar las líneas del cambio que desea dividir.

+Line 1 +Line 2 +Line 3

Digamos que quiere mantener la Línea 1 y la Línea 3 en una confirmación y la Línea 2 en otra. Todo lo que tienes que hacer es borrar la línea 2:

+Line 1 +Line 3

Esto pondrá la Línea 1 y la Línea 3 en su área de preparación. La línea 2 seguirá indexada, pero no escalonada.


Como dice Alan, edite el parche presionando e (en lugar de s ) durante git add -p . Esto lanzará su editor con ese pedazo del parche para que pueda editarlo manualmente. Hay comentarios dentro del texto que explican cómo descartar correctamente las modificaciones y en realidad es bastante fácil.

Cuando hayas terminado, ten en cuenta que puedes probarlo solo con los cambios que acabas de agregar haciendo git stash --keep-index . Los cambios que no agregó al índice se guardarán y ahora puede probar solo los cambios que está a punto de comprometer. Cuando termine, simplemente git stash pop o git stash apply para recuperar los otros cambios.


Puede editar el parche presionando e durante un git add -p . No afectará el archivo original.


Hay GUIs de Git que te permitirán seleccionar líneas individuales que quieras representar, lo que te permitirá dividir las líneas que normalmente no podrías usar con el git add --patch regular de git add --patch desde la línea de comando.

Dos de estas GUI son:

  1. SourceTree .
  2. Git Cola .

Normalmente obtengo conflictos de combinación del git stash pop descrito en la respuesta de @ Dan. Mira git stash y edited hunks para encontrar una solución que evite los conflictos.