¿Cómo edito o reformulo el mensaje de una confirmación de fusión?
git commit --amendfunciona 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-mergesopción (o su sinónimo, -p) al git rebase -icomando, 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 toHEAD~5está el padre de la confirmación que desea modificar (generalmente sha1 ^)?--preserve-mergeses ahora--rebase-mergesTenga en cuenta que, al iniciar git1.7.9.6 (y git1.7.10 +),
git mergesiempre activará el editor , para que pueda agregar detalles a una fusión.También presenta una variable de entorno
GIT_MERGE_AUTOEDITpara 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 --editLe permite dar el comentario incluso en caso de fusión no interactiva.
git merge --edit --no-ffpuede 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~5comando abre el editor. Enumera las confirmaciones especificadas (en este caso, cinco de ellas). La primera columna contienepickpara cada confirmación. Simplemente reemplacepickconreworden ese editor y guarde + cierre el editor. Entonces git emergerá el editor para cada confirmación, donde ha cambiadopickarewordy le permitirá editar el mensaje de confirmación.fuente
-palgit rebasecomando.