¿Cómo edito o reformulo el mensaje de una confirmación de fusión?
git commit --amend
funciona si es el último commit realizado ( HEAD
), pero ¿y si viene antes HEAD
?
git rebase -i HEAD~5
no enumera las confirmaciones de fusión.
Si agrega la --preserve-merges
opción (o su sinónimo, -p
) al git rebase -i
comando, git intentará preservar las fusiones al rebasear, en lugar de linealizar el historial, y también debería poder modificar las confirmaciones de fusión:
git rebase -i -p HEAD~5
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to
HEAD~5
está el padre de la confirmación que desea modificar (generalmente sha1 ^)?--preserve-merges
es ahora--rebase-merges
Tenga en cuenta que, al iniciar git1.7.9.6 (y git1.7.10 +),
git merge
siempre activará el editor , para que pueda agregar detalles a una fusión.También presenta una variable de entorno
GIT_MERGE_AUTOEDIT
para ayudar a los scripts anteriores a rechazar este comportamiento.Ver " Anticipando Git 1.7.10 ":
Linus dijo:
Tenga en cuenta que, antes de Git 2.17 (Q2 2018), "
git rebase -p
" destrozó los mensajes de registro de una confirmación de fusión, que ahora está corregida.Ver commit ed5144d (08 de febrero de 2018) por Gregory Herrero (``) .
Sugerido por: Vegard Nossum (
vegard
) y Quentin Casasnovas (casasnovas
) .(Fusionada por Junio C Hamano -
gitster
- en commit 8b49408 , 27 feb 2018)Con Git 2.23 (Q2 2019), una "
merge -c
" instrucción durante "git rebase --rebase-merges
" debería darle al usuario la oportunidad de editar el mensaje de registro, incluso cuando no sea necesario crear una nueva fusión y reemplazar la existente (es decir, avanzar rápidamente en su lugar) ), pero no.Que ha sido corregido.
Ver commit 6df8df0 (02 de mayo de 2019) por Phillip Wood (
phillipwood
) .(Fusionada por Junio C Hamano -
gitster
- en commit c510261 , 13 jun 2019)fuente
Otra buena respuesta usando solo comandos primitivos: por knittl https://stackoverflow.com/a/7599522/94687 :
o un comando de rebase final mejor (más correcto):
Por cierto, el uso de los comandos primitivos podría tener la buena "característica" de no consumir demasiada CPU y hacer que espere un tiempo desconocido hasta que Git termine de pensar en la lista de confirmaciones que deben modificarse en el caso de
git rebase -p -i HEAD^^^^
(un comando que resultaría en ¡una lista de solo 4 últimas confirmaciones con la fusión como la última en mi caso en mi caso tomó alrededor de 50 segundos!).fuente
git merge --edit
Le permite dar el comentario incluso en caso de fusión no interactiva.
git merge --edit --no-ff
puede ser útil si sigue el flujo de git con rebase en la rama de desarrollo y se fusiona sin avance rápido.fuente
Para las versiones actuales de Git (Mai 2020):
git rebase -i -r <parent>
,luego reemplace en el editor
merge -C ...
conmerge -c ...
.Esto abrirá el mensaje de confirmación en el editor durante el rebase, donde puede cambiarlo.
(Gracias a VonC por la pista ).
fuente
El
git rebase -i HEAD~5
comando abre el editor. Enumera las confirmaciones especificadas (en este caso, cinco de ellas). La primera columna contienepick
para cada confirmación. Simplemente reemplacepick
conreword
en ese editor y guarde + cierre el editor. Entonces git emergerá el editor para cada confirmación, donde ha cambiadopick
areword
y le permitirá editar el mensaje de confirmación.fuente
-p
algit rebase
comando.