Magit - Deshacer el último commit - Manipulación de historia

12

Esta pregunta de StackOverflow tiene las mejores soluciones / enfoques para deshacer las últimas confirmaciones.

Empecé a usar Magit hace un par de semanas y después de revisar toda su documentación todavía no tengo una forma definitiva / mejor de deshacer un cambio cometido por error.

Por ejemplo:
para deshacer y rehacer la última confirmación, podemos usar:

$ git commit -m "Something terribly misguided"
$ git reset HEAD~
<< edit files as necessary >>
$ git add ... 
$ git commit -c ORIG_HEAD # To keep the same commit message

¿Cuál debería ser el mejor flujo de trabajo para reproducir este procedimiento usando Magit ?

Alexandro de Oliveira
fuente

Respuestas:

17

Puede usar magit-reset(enlazado por defecto a x). El commit en el punto se usará como predeterminado para la solicitud, pero puede ingresar cualquier valor de revisión que desee ("HEAD ~" aquí).

Los comandos de reinicio se describen en la sección "Reinicio" del manual: https://magit.vc/manual/magit/Resetting.html

Para reutilizar el mensaje de confirmación, puede usar la =Copción en la ventana emergente de confirmación. Inmediatamente, el indicador no ofrece actualmente ningún valor de finalización (creo que probablemente debería ofrecer al menos ORIG_HEAD), pero antes de reiniciar puede poner el hash de la confirmación actual en el anillo de eliminación (por ejemplo, con C-wen la línea "Head:" del búfer de estado) y luego, después de reiniciar, tírelo como el valor de la =Copción.


Algunos comentarios adicionales:

  • En lugar de usar =C, puede ser más conveniente comenzar el commit ( cc) y luego usar git-commit-prev-message ( M-p) para recorrer los mensajes anteriores.

  • Si solo está modificando la última confirmación, puede agregar cambios por etapas a la confirmación anterior con magit-commit-amend ( ca) o magit-commit-extend( ce). (Este último reutiliza el mensaje de confirmación, omitiendo el búfer COMMIT_EDITMSG).

Kyle Meyer
fuente