Básicos Git (V): Amend

El propósito de Amend lo que hace es agrupar commits antes de hacer un push, si por ejemplo se está desarrollando una funcionalidad y nos damos cuenta que hemos olvidado añadir algo en lugar de crear dos commits separados podemos crear uno y después hacer un amend para agruparlos.

Imaginemos que tenemos un solo cambio en ese caso veríamos lo siguiente:

un solo cambio pendiente

Si hacemos esto varias veces tendremos cada vez más commits:

varios commits pendientes

Así que para evitar acumular commits a la hora de crear uno nuevo seleccionamos la opción ammend previous commit.

uso de ammend

Esto añadirá los cambios al anterior commit manteniendo solo uno con todas las modificaciones, el comentario de este nuevo commit será el mismo que tenía el commit anterior sino especificamos uno nuevo.

Básicos Git (V): Amend

Básicos Git (IV): Reset

Reset hace que el apuntador actual de la rama se desplace pudiendo apuntar a commits anteriores o posteriores en el historial.

Normalmente el apuntador de la rama apunta al último commit pero es posible moverlo en caso de que se quiera volver a una situación anterior de la rama y continuar a partir de ella.

Vamos a suponer que tenemos inicialmente una rama master y una develop, al crear la rama develop como es normal el apuntador apunta a HEAD, es decir al último commit, si añadiéramos un nuevo commit (Commit #3) el apuntador se desplazaría junto con el.

inicial

Ahora vamos a usar la opción reset para desplazarnos hacia atrás en el historial, para esto accederemos al historial de main y usaremos la opción reset estando posicionados en la rama en la que nos queremos mover, en este caso develop.

Keep changes (–mixed)

Esta opción provoca que si tenemos ficheros modificados se mantendrán a la par que nos desplazamos hacia atrás en el historial.

reset –mixed

Para verificar esto volvemos a la sección changes y veremos que los cambios siguen ahí y que a su vez los demás ficheros han sido cambiados a la versión concreta elegida.

Keep changes (–hard)

Esta opción provoca que si tenemos algún cambio se perderá a la par que nos desplazamos hacia atrás en el historial.

reset –hard

Para verificar esto volvemos a la sección changes y veremos que no hay ningún cambio pendiente y al igual que en el caso anterior los ficheros han sido cambiados a la versión elegida.

Bonus

Se puede deshacer el último commit usando reset en una rama local, simplemente habría que hacer un reset al commit anterior al que estamos.

Esto se debe a que como no hemos hecho push no hemos avanzado en el historial y al hacer reset podemos volver al punto de partida.

Por ejemplo tenemos un commit en una rama local:

historial de la rama

Ahora vamos a deshacer el último, tenemos que seleccionar el anterior (Commit Id e52d15a7).

detalle del commit

Solo tenemos que pulsar la opción de reset eligiendo –hard si queremos deshacer el commit y borrar el contenido o –mixed si queremos deshacer el commit pero manteniendo el contenido, en este caso veremos los contenido del commit en la sección de changes.

contenido del commit usando –mixed

Como detalle final se puede hacer también un reset al último commit de la rama local, en ese caso lo que haríamos sería ponerlo como commit pendiente de realizar un push, es decir seguiría siendo un commit y no aparecía en changes.

Esto nos puede servir para modificarlo a través de un amend si queremos mantener el contenido pero además agregar otros nuevos.

Básicos Git (IV): Reset