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"
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
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.
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...