Si. Escriba el mensaje de confirmación en un archivo diferente ( :w /some/other/path.txt
). Luego salga del editor sin guardar ( :q!
). Si previamente guardó el archivo en su ruta original, elimine todo y escriba primero el archivo vacío (un mensaje de confirmación vacío cancelará la confirmación).
Ahora, cuando esté listo para comprometerse "para reales", use el archivo de mensaje que guardó en la ruta alternativa.
Alternativamente, copie el mensaje de confirmación en uno de los buffers de vim.
Vale la pena señalar que realmente no tiene que hacer esto en absoluto : le commit --amend
permite modificar el compromiso después de que se realiza, por lo que la solución fácil es producir el compromiso con lo que tiene y luego solucionarlo antes de presionar. Incluso puede terminar la confirmación en su estado roto reset HEAD~
(lo restablece al estado en que se encontraba su copia de trabajo antes de la confirmación), corregir su copia de trabajo y luego commit -a -c HEAD@{1}
usar el mensaje de confirmación anterior.
write the empty file (an empty commit message will abort the commit)
parte funcionó a las mil maravillas, gracias!Si su editor puede salir con un código de error, Git cancelará la confirmación. Cuando use VIM, escriba
para salir con un código de error distinto de cero y abortar la confirmación.
fuente
commit --amend
ya que de lo contrario tendría que eliminar el mensaje de confirmación existente y:wq
.git commit --amend
lugar degit rebase --continue
durante el rebase.Si ha abierto vim para escribir su mensaje de confirmación, simplemente elimine las líneas que no comienzan con # y git cancelará su confirmación
fuente
ggdG
cortará todo el contenido del mensaje, luego, la próxima vez que ejecutevim
, solo puedeP
cortar el texto que cortó anteriormente.Si bien puede cancelar la confirmación, otro enfoque es modificar la confirmación después. Simplemente confirme su trabajo actual, luego realice los cambios adicionales que desee
git add
, luego ejecutegit commit --amend
. Volverás al editor de mensajes de confirmación y, cuando guardes, la confirmación se modificará para incluir los cambios adicionales y tu nuevo mensaje de confirmación.fuente
Si es posible. Para confirmar, su editor DEBE escribir el mensaje de confirmación en el archivo
.git/COMMIT_EDITMSG
y salir con un código de estado 0.Entonces, si está utilizando VI / VIM, es posible que desee hacer lo siguiente ...
:w
(de forma predeterminada, esto guardará el contenido actual en.git/COMMIT_EDITMSG
):cq
git commit -eF .git/COMMIT_MESSAGE
El
-F /path/to/file
llenará el editor con cualquier contenido dado de / ruta / a / archivo. Sin embargo, de forma predeterminada, esto realizaría la confirmación al instante, a menos que proporcione el-e
indicador adicional para su edición .fuente
/foo/bar/
directorio, relativo desde la raíz del proyecto) comogit commit -eF ../../.git/COMMIT_MESSAGE
:w
hacer:sav committmp
ygit commit -eF committmp
Por lo general, me comprometo
IntelliJ
usando los terminales provistos. Lamentablemente mis commits son manuales:git commit -m'my message' // etc
¡así que lo único que creo que es seguro hacer es cerrar la ventana del terminal! Simplemente resalte su texto si desea guardarlo, luego copie, luego cierre la ventana del terminal.
fuente
La respuesta de @bdonlan es buena para esta misma pregunta, pero señalaré una situación en la que podría querer una mejor solución.
Digamos que desea agregar cambios a la última confirmación. Entonces haces lo que @bdolan sugirió:
Imagine que durante la escritura del nuevo mensaje, se arrepiente de agregar esos archivos a esa confirmación. El problema es que está atrapado con un mensaje de confirmación ya guardado y al salir del editor (con o sin guardar) agregará esos cambios a la última confirmación. Volver al punto en el que estaba antes de estas acciones requiere que divida el último compromiso ; apuesto a que desea evitarlo.
El truco consiste en guardar y salir del editor mientras solo tiene líneas que comienzan con
#
o ninguna línea. Cuando salgas, serás recibido con el mensaje:Y no has cambiado la última confirmación en absoluto.
fuente
git commit; vim ....; git commit --amend; git reset HEAD@{1}
. Es decir: si quiero "deshacer" la enmienda, entonces no tengo que dividir el compromiso anterior. El objeto de confirmación HEAD antes de la modificación se guarda comoHEAD@{1}
. Además, zetta ya sugirió eliminar todas las líneas sin comentarios.