¿Cómo modificar el mensaje de un commit en particular?

Quisiera modificar el mensaje de un commit en particular, se que con el siguiente comando puedo modificar el mensaje del ultimo commit realizado:

git commit –amend -m “your new message”

¿Pero cómo puedo modificar el mensaje del antepenultimo commit realizado? ¿Es posible?

=================

  

 

El antepenúltimo commit es HEAD~3 el comando git rebase es git rebase -i HEAD~4 nuevamente, recuerda no reescribir la historia de commits que ya existan en un remote
– rbernabe
el 17 dic. 15 a las 18:00

=================

3 respuestas
3

=================

Puedes usar git rebase para ir a un commit viejo. Por ejemplo, si tienes estos commits:

HEAD
Commit1 aac723ab
Commit2 cdc213ff
Commit3 aff521cd

y quieres modificar el Commit 2 harías lo siguiente:

git rebase –interactive cdc213ff^

En el editor que saldrá (el default) pon edit, r o reword en lugar de pick en la línea del commit que desees modificar.

Algo así:

Antes:

pick cdc213ff Mensaje del commit que deseas modificar

Después:

reword cdc213ff Mensaje del commit que deseas modificar

Has tus cambios (si tuvieras) y luego haces el nuevo commit:

git commit –all –amend -m “Tu nuevo mensaje”

Y luego de eso:

git rebase –continue

Para regresar a tu HEAD anterior.

Precaución:

Esto no es recomendable en repositorios públicos dado que si hay programadores que basaron sus cambios en los commits posteriores, tendrán una especie de código fantasma y causará muchas confusiones. Pero en tu caso, si sólo vas a cambiar el mensaje entonces no hay mucho problema. Puedes ver esas recomendaciones acá.

Lo que tenés que hacer es un rebase interactivo (-i) usando el comando reword del mismo.

Primero ejecutá git rebase -i ~1 para pedir hacer rebase interactivo de la rama actual a partir del commit anterior (~1) al que estás queriendo modificar. Eso disparará tu $EDITOR con un listado de todos los commits que existen desde ese hasta el tope de tu rama, indicando pick, hash y mensaje de cada uno. Algo como:

pick abcdef0 Mensaje del commit más nuevo
pick bcdef01 Mensaje del commit anterior

pick fde2152 Mensaje del commit a editar

Cambiá pick por r o reword en la línea del commit a editar. Algo así:

pick abcdef0 Mensaje del commit más nuevo
pick bcdef01 Mensaje del commit anterior

r fde2152 Mensaje del commit a editar

Guardá el archivo y salí del editor, y git va a volver hasta ese commit y disparar el $EDITOR nuevamente, pero esta vez con el mensaje del commit ahí presente. Algo como:

Mensaje del commit a editar

Este mensaje es el que habías escrito en el primer
git commit, y que ahora querés reemplazar por uno nuevo

Editá el mensaje para que quede como querés, grabá el archivo, salí del editor, y git aplicará todos los commits que faltaban para que tu rama quede igual, excepto por tener el mensaje actualizado.

No te olvides que estás modificando la historia de tu repositorio, por lo que si habías publicado el commit al que estás editando el mensaje o cualquiera de sus sucesores podés generar conflictos al resto de tu equipo.

Esto implica reescribir la historia. Debes tener en cuenta que esta CONTRAINDICADO reescribir la historia de los commits que ya están en un remote.

Aclarado esto, puedes reescribir la historia y por lo tanto, cambiar el mensaje de un commit utilizando el comando git-rebase con la siguiente sintaxis:

git rebase $COMMITID~1

Entonces git abre un editor con un contenido similar al siguiente:

pick af65427 foo
pick 1d4ba60 bar
pick 9679424 baz
pick 4ac4adc bax

En este editor cambias la palabra pick por la palabra reword

pick af65427 foo
reword 1d4ba60 bar
pick 9679424 baz
pick 4ac4adc bax

Posteriormente, Git abrirá un editor en el que puedes capturar el nuevo mensaje de tu commit.

barbarbar

# Please enter the commit message for your changes. Lines starting
# with ‘#’ will be ignored, and an empty message aborts the commit.
#
# Author: asdfasdf
# Date: Wed Nov 18 11:45:44 2015 -0600
#
# interactive rebase in progress; onto 1b90076
# Last commands done (2 commands done):
# pick af65427 actualizacion shells para produccion
# reword 1d4ba60 acualizacion shell extract_correct_invalid_account
# Next commands to do (2 remaining commands):
# pick 9679424 correccion test, dado que usuario es requerido
# pick 4ac4adc validacion cuando viene MXP en movimientos de cuenta
# You are currently editing a commit while rebasing branch ‘develop’ on ‘1b90076’.
#
# Changes to be committed:
# modified: xxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xx
#
# Untracked files:
# xxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx/xxx.log
# xxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxx/foo.txt

Una vez que cierres el editor, git reescribira los commits posteriores al reword y actualizará la referencia de tu branch Actual

Saludos