Sobreescribiendo commit anterior

Una de las utilidades que uso muy seguido al querer hacer un pequeño cambio que me olvidé hacer en el último commit es:

git commit --amend

Este comando me deja pisar el último commit que realicé con uno nuevo. Ya sea para agregar algún cambio, o si simplemente quiero cambiar el mensaje de ese commit. Si todavía no hice un push de los cambios eso es todo, si por el contrario ya lo realizamos, vamos a tener que forzarlo haciendo:

git push --force

¿Y si quiero cambiar los mensajes de los últimos 3 commits?

En mi caso, me había confundido con el número de issue al que hacía referencia en el mensaje de los últimos 3 commits. Esto lo pude corregir haciendo uso de rebase de la siguiente forma:

git rebase -i HEAD~4

Nos da un listado con los últimos 4 commits, con la siguiente pinta:

pick 12039uh No me importa
pick f809asd Alto 3er commit
pick blj0800 Mi super commit 2
pick m24bjk1 EL commit

Cambiamos el pick por reword sobre los commits cuyos mensajes queremos modificar, para que quede así:

pick 12039uh No me importa
reword f809asd Alto 3er commit
reword blj0800 Mi super commit 2
reword m24bjk1 EL commit

Guardamos, y en cada commit podemos cambiar el mensaje. Después hacemos un git push -f. Y así podemos cambiar varios mensajes de commits anteriores.


Nota: recomiendo leer más sobre git rebase ya que deja hacer más acciones sobre nuestros commits anteriores. Quizás más adelante escriba más sobre el tema.