corregir-errores-con-git-commit-amend

Arreglando el último commit en Git con Amend

  • 3 min

El modificador git commit —amend es un comando que nos permite reescribir el último commit, integrando cambios olvidados o corrigiendo el mensaje.

La tipica situación. Justo acabas de hacer un commit, y dos segundos más tarde te das cuenta de que has escrito mal el mensaje. Has puesto “Implemnetar” en vez de “Implementar” 😤.

O peor aún, has hecho el commit y ves que te has dejado fuera un archivo importante que querías que fuera en ese commit.

Podríamos resolver esto creando un nuevo commit adicional para correcciones menores. Pero, si realmente no aporta nada, solo ensucias el historial.

Para estos casos (principalmente arreglar despiestes tontos) Git proporciona la opción git commit --amend.

Escenario 1: Corregir el mensaje del commit

Este es el caso más sencillo. El contenido de los archivos está bien, pero el texto del mensaje tiene un error o no sigue las normas del equipo.

Para cambiarlo, simplemente ejecuta:

git commit --amend -m "Nuevo mensaje corregido y bonito"
Copied!

Git cogerá el último commit, cambiará su descripción por la nueva y actualizará la historia (Nadie sabrá jamás que habias puesto ‘HARREGLADO’ con ‘H’ 😎).

Si ejecutas git commit --amend sin el parámetro -m, se abrirá tu editor de texto configurado (Vim/VS Code) con el mensaje antiguo, permitiéndote editarlo cómodamente.

Escenario 2: Añadir un archivo olvidado

Imagina que has hecho un commit “Crear componente de botón”, pero te has dejado el archivo boton.css sin añadir al Stage.

En lugar de hacer un commit nuevo, sigue estos pasos:

  1. Añade el archivo olvidado al Stage como harías normalmente:
git add boton.css
Copied!
  1. Ejecuta el comando amend con la opción --no-edit:
git commit --amend --no-edit
Copied!

Esta bandera le dice a Git: “Usa el mismo mensaje que ya tenía el commit anterior, no quiero cambiar el texto, solo quiero meter este archivo nuevo dentro de ese commit”.

El resultado es un único commit que contiene tanto los archivos originales como el olvidado.

¿Qué ocurre internamente?

Aunque a nuestros ojos parece que hemos “editado” el commit, Git no edita nada. Los commits son inmutables, nunca se modifican.

Lo que hace amend realmente es:

  1. Coge el commit original y lo deshace temporalmente.
  2. Le suma los nuevos cambios (si los hay).
  3. Crea un NUEVO commit que sustituye al anterior (con un nuevo Hash SHA-1).

Esto significa que el commit a1b2c3d desaparece y es reemplazado por f9e8d7c.

Dado que amend cambia el Hash del commit (reescribe la historia), grábate esto a fuego:

NUNCA uses --amend en un commit que ya has subido al servidor.

Si has hecho git push y tus compañeros ya han descargado ese commit, cambiarlo en tu ordenador provocará un conflicto grave de historias.

Para arreglarlo tendrás que hacer un Force Push, y si trabajas en equipo tendrás una liada enorme.