Git: ¿Cómo editar / reescribir un post de compromiso de fusión?

¿Cómo edito o reescribo el post de un commit de fusión?

git commit --amend funciona si es el último commit realizado ( HEAD ), pero ¿y si viene antes que HEAD ?

git rebase -i HEAD~5 no muestra los commit de fusión.

Si agrega la opción --preserve-merges (o su sinónimo, -p ) al command git rebase -i entonces git intentará preservar las fusiones cuando se rebase, en lugar de linealizar el historial, y usted debería poder enmendar el fusionar se compromete también:

 git rebase -i -p HEAD~5 

Tenga en count que, al iniciar git1.7.9.6 (y git1.7.10 +), git merge sí mismo activará el editor , para que usted agregue detalles a una fusión.

" git merge $tag " para fusionar una label anotada siempre abre el editor durante una session de edición interactiva. La serie v1.7.10 introdujo una variable de entorno GIT_MERGE_AUTOEDIT para ayudar a las secuencias de commands anteriores a rechazar este comportamiento, pero la pista de mantenimiento también debería ser compatible.

También introduce una variable de entorno GIT_MERGE_AUTOEDIT para ayudar a las secuencias de commands anteriores a rechazar este comportamiento.

Consulte " Anticipar a Git 1.7.10 ":

Recientemente, en una discusión en la list de correo de Git , Linus admitió (y acepté) que este fue uno de los errores de layout que cometimos al principio de la historia de Git.
Y en 1.7.10 y posteriores, el command git merge que se ejecuta en una session interactiva (es decir, tanto su input estándar como su salida estándar conectada a un terminal) abrirá un editor antes de crear un compromiso para registrar el resultado de fusión, para dar el usuario tiene la oportunidad de explicar la fusión, al igual que el command de confirmación de git que el usuario ejecuta después de resolver una fusión en conflicto ya lo hace.

Linus dijo:

Pero realmente no me importa cómo funciona: mi principal problema es que git hace que sea muy fácil tener malos posts de fusión.
Creo que parte de eso es una idiotez aún más simple: nunca arrancamos el editor de manera pnetworkingeterminada para una "combinación git", pero hacemos un " git commit ".
Eso fue un error de layout, y significa que si realmente quiere agregar una nota a una fusión, debe hacer un trabajo extra. Entonces la gente no .

Otra buena respuesta que usa solo commands primitivos – por knittl http://sofes.miximages.com/a/7599522/94687 :

 git checkout <sha of merge> git commit --amend # edit message git rebase HEAD previous_branch 

o un mejor (más correcto) command de rebase final:

 git rebase <sha of merge> previous_branch --onto HEAD 

Por cierto, usar los commands primitivos podría tener la buena "característica" de no consumir demasiada CPU y hacer que esperes un time desconocido hasta que Git termine de pensar en la list de confirmaciones que necesitan ser reestadificadas en el caso de git rebase -p -i HEAD^^^^ (tal command que resultaría en una list de solo 4 últimos commits con la fusión como último en mi caso en mi caso tomó alnetworkingedor de 50 segundos).

El git rebase -i HEAD~5 el editor. Enumera las confirmaciones especificadas (en este caso cinco de ellas). La primera columna contiene pick para cada commit. Simplemente reemplace pick con reword en ese editor y guarde + cierre el editor. Luego, git mostrará el editor emergente para cada confirmación en la que haya cambiado la pick por la reword y le permitirá editar el post de confirmación.