
¿Cómo añadir cambios al último commit?
A todos nos ha pasado, recién hicimos commit con nuestros cambios pero…
- Olvidamos añadir un archivo.
- Nos dimos cuenta de un typo en el código y queremos repararlo.
- Hicimos un cambio que debe ser parte del último commit.
- O a veces, todas las anteriores.
Para todos estos casos, solo tendríamos que hacer lo siguiente:
git add . #Or any specific file(s)git commit --amend --no-edit
Y listo, todos los archivos que nos hicieron falta ahora son parte del último commit en nuestra rama actual. Ahora nos queda subir nuestros cambios, pero primero…
¡Un dato de vital importancia!
La bandera --amend
utilizada en el comando anterior, cambia el short SHA-1 de nuestro último commit. Git interpretará esto como una “historia” (rama) diferente, ya que el short SHA-1 es el principal distintivo.
No importa si el nombre de la rama o el mensaje de nuestro commit no hayan cambiado, luego de ejecutar el comando el hash habrá cambiado.
Por lo tanto, si ya habías hecho push
de tus cambios hacia el repositorio remoto, dado que la historia cambió luego de realizar el amend, el remote te va a rechazar los cambios.
Aquí es cuando el push --force
se vuelve nuestra opción principal. Entonces nuestra solución ahora se convierte en:
git add . #Or any specific file(s)git commit --amend --no-editgit push origin --force <my-branch-name>
Los mismos dos pasos del inicio, con un paso extra. Ahora…
¿El push force es una mala práctica?
Para esta pregunta, como muchas otras en el mundo de la tecnología, la respuesta es: depende. Usar push --force
es una acción que debemos realizar a conciencia, entendiendo resultados que genera este comando.
En el caso donde estemos afectando una rama colaborativa o default (como master o develop) recomendaría tener mucho cuidado y comunicación con tu equipo al respecto.
Proactivos, no reactivos
Como vimos, la combinación anterior de comandos nos ayuda en situaciones donde tenemos que ser “reactivos” a situaciones inesperadas. Pero, ¿cómo podemos activamente evitar estos escenarios?
Es sencillo, cultivando y mejorando nuestro proceso personal usando Git.
Para lo anterior siempre recomiendo un artículo de Chris Beams, donde detalla buenas prácticas y consideraciones para escribir buenos mensajes de commit. Seguro obtienes otro par de trucos de la lectura.