Modificar el último commit, con Git

  • Por
Una operativa corriente del mantenimiento de un repositorio Git consiste en modificar el commit realizado por último con la opción --amend.

En el día a día de Git hay una situación que se produce bastante a menudo y que podemos solucionar de una manera elegante con una opción determinada de la acción de commit. Básicamente se trata de modificar el último commit, en lugar de crear uno nuevo.

Imagina que estás editando tu proyecto, realizas una serie de cambios y luego haces el correspondiente commit para confirmarlos en el repositorio. Casi enseguida te das cuenta que cometiste un error. Entonces puedes arreglar tu código para solucionarlo y lanzar otro commit para confirmarlo. Está todo bien, lo que pasa es que la funcionalidad que has agregado es solo una, lo que pasa es que se generaron dos commits cuando lo más elegante es que hubiéramos creado solo uno, con la funcionalidad bien realizada.

La manera de solucionar esta situación es muy sencilla y merece la pena que la veamos, porque no supone ningún esfuerzo y nos permite gestionar nuestro repositorio un poco mejor. Como seguramente estemos empezando con Git, leyendo el Manual de Git de DesarrolloWeb.com, vamos a hacer una práctica completa que a la vez nos servirá de repaso de todo lo aprendido.

Situación de nuestro repositorio

Partamos de un repositorio vacío:

git init

Ahora creamos un archivo llamado "README". En el que podemos colocar ya un poco de texto. Lo puedes hacer también con la consola con este comando (aunque también lo puedes hacer, claro está, con tu editor preferido).

echo "Esto es el README" > README

Luego añado los archivos al staging area, para que estén trackeados por Git.

git add .

Ahora hago un commit confirmando los cambios.

git commit -m 'creado readme'

Hacer cambios en el archivo

Ahora te das cuenta que no colocaste algo en el README y lo editas de nuevo para colocar cualquier nuevo contenido, como tu nombre como autor del proyecto y tu email. Abres el archivo con tu editor y lo modificas. Podemos ver los cambios recién realizados con el comando status:

git status

Obtendrás una salida como esta:

Ahora podrías agregar ese archivo:

git add .

Y luego hacer la confirmación con:

git commit -m 'Indicado el nombre del autor"
Nota: Como el archivo ya se encuentra en el repositorio, Git lo está trackeando, podrías ahorrarte un paso, agregando el archivo y haciendo la confirmación de una única vez, con git commit -am 'indicado nombre del autor'.

Pero justamente es lo que queremos evitar. No necesito dos commits para esta operación, ya que he creado simplemente el README y me olvidé una cosa simple que no merece la pena tener en un commit separado.

Modificar el commit con --amend

Entonces, vamos a alterar el commit anterior, ya que es lo lógico, en vez de producir un commit nuevo. Simplemente indicamos la opción --amend.

git commit --amend
Nota: Aunque lo hicimos en el anterior paso, no te olvides de hacer el "git add .", porque si no en el commit no habrá nada que enviar.
En este caso no ponemos mensaje, ya que el mensaje ya lo habíamos indicado en el anterior commit. No obstante, Git nos abrirá un editor para que nosotros podamos editar el mensaje y cambiarlo por el que nos guste más. Puedes ahorrarte el (para algunos fastidioso) editor de línea de comandos indicando el mensaje en el commit con "-m". Aunque estés haciendo un "amend" y ya tengas mensaje lo puedes sobreescribirlo directamente sin tener en cuenta lo indicado anteriormente: git commit --amend -m 'Creado el readme editado el commit primero'

El editor puede variar dependiendo del sistema en el que te encuentres. Pero básicamente en todos los casos podrás editar el texto del mensaje del commit y luego activar la opción para salir de edición del texto.

Nota: A mi me lo abre con Vim, por lo que tengo que, desde el modo comando (pulsas ESC para asegurarte que estás en modo comando), escribes :wq y pulsas enter.

Listo, con esto hemos editado el anterior commit en vez de crear uno nuevo.

Por último, si haces "git log" podrás ver que efectivamente solo hay un commit en el repositorio, ya que el que hicimos para arreglar el problema en el README realmente solo modificó el commit anterior.

Listo, eso es todo. Ya sabes modificar el último commit sin necesidad de hacer un commit nuevo e innecesario.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir