Introducción
Git cuenta con diferentes mecanismos para reescribir el historial, que incluyen los comandos git commit --amend, git rebase y git reflog. Leer nuestro tutorial te ayudará a comprender mejor las funciones de estos comandos y sus particularidades.
Modificar el último commit con git commit --amend
A menudo puedes olvidar formatear tu commit, añadir archivos al área de preparación (staging) o cometer un error en el mensaje del registro del commit. Aquí es donde git commit --amend resulta útil. Ejecutar este comando te ayudará a corregir este tipo de errores menores. En general, este comando se utiliza para modificar el último commit. Ejecuta el siguiente comando para combinar los cambios preparados con el commit anterior:
git commit --amendEs importante recordar que, para evitar problemas de colaboración, no deberías modificar commits que están siendo desarrollados por otros usuarios.
Comando git reflog
Los “reflogs” (registros de referencias) se utilizan para registrar las actualizaciones que se realizan en la punta de las ramas. Con el comando git reflog, puedes volver a todos los commits, incluidos aquellos que no han sido referenciados por ninguna rama. Ejecuta el siguiente comando para ver el registro:
git reflogEl comando git reflog cuenta con sus propios subcomandos, que incluyen git reflog show, git reflog expire y git reflog delete.
Git rebase
El comando git rebase se utiliza para mover o combinar una serie de commits en un nuevo commit base completamente nuevo. El beneficio más importante de este comando es un historial claro, lo cual es fundamental para trabajar de manera efectiva en Git. Existen dos modos del comando git rebase: estándar e interactivo. En el modo estándar, puedes usar git rebase para aplicar los commits de la rama de trabajo actual al encabezado de la rama especificada. Con la ayuda del modo interactivo, puedes mantener el historial del proyecto limpio. Para ejecutar el modo interactivo, añade la opción -i a git rebase:
git rebase -i <base-branch>Múltiples mensajes
Cada commit de Git tiene un mensaje de registro que explica lo ocurrido en dicho commit. Durante un rebase interactivo, puedes usar los siguientes comandos para editar los mensajes de los commits:
- Usa el comando
r(reword/reeditar) para pausar la reproducción del rebase y reescribir el mensaje individual del commit. - El comando
s(squash/combinar) pausará todos los commits marcados cons, y recibirás un mensaje para modificar los mensajes individuales y combinarlos en uno solo. - El comando
f(fixup/fijar) es similar a squash. La diferencia es que no detendrá la reproducción del rebase para abrir un editor y combinar los mensajes de los commits.
Combinar commits para un historial limpio
El comando squash especifica los commits que deseas fusionar con los anteriores. Git abre el editor de texto y solicita combinar los mensajes específicos de los commits. La siguiente infografía demuestra perfectamente el proceso.

Los commits que han sido modificados con el comando git rebase tienen identificadores diferentes a los originales. Si se reescriben los commits anteriores, los commits marcados con pick tendrán un identificador completamente nuevo.
Práctica
¿Cuáles de las siguientes afirmaciones son verdaderas respecto a los mecanismos para reescribir el historial en Git?