Introducción
Cuando trabaje con Git, es posible que desee deshacer la última confirmación. Una confirmación es una instantánea de un repositorio de Git en un momento dado. Git tiene una variable de referencia llamada HEAD
que apunta a la última confirmación en la rama de trabajo actual. Para deshacer una confirmación, todo lo que tiene que hacer es apuntar la HEAD
a la instantánea anterior.
Esta guía explica cómo deshacer la última confirmación de Git en Linux.
No se recomienda cancelar una confirmación que ya se envió a un repositorio compartido. Si solo desea cambiar el mensaje de confirmación, consulte este artículo.
Arquitectura Git de tres árboles
En Git puedes deshacer los cambios usando el git reset
seguido del identificador de confirmación.
git reset
acepta argumentos adicionales que le permiten controlar el comportamiento del comando. Para comprender mejor cómo reset
, hablemos de los tres árboles diferentes de Git. La arquitectura de tres árboles es el concepto clave del sistema de gestión Git. Se llaman árboles porque representan colecciones de archivos.
Git gestiona y manipula los siguientes tres árboles:
- El directorio de trabajo: un directorio que incluye todos los subdirectorios y archivos del sistema de archivos local asociado con el repositorio. A menudo se lo denomina "árbol de trabajo". El directorio de trabajo es algo así como una caja de arena donde puede probar los cambios antes de enviarlos al índice de ensayo.
- El índice: este árbol realiza un seguimiento de los archivos nuevos o modificados que se han agregado al índice con
git add
, que se incluirán en la próxima confirmación. A menudo se denomina "área de preparación" o "índice de preparación". HEAD
: un puntero a su última confirmación en la rama actual.
El git reset
tiene tres argumentos que corresponden a los tres árboles:
--soft
: actualiza elHEAD
a la confirmación especificada. El directorio de trabajo y el índice no se modifican.--mixed
: actualiza elHEAD
y restablece el índice a la confirmación especificada. El directorio de trabajo no se toca. Este es el modo de funcionamiento predeterminado del comando dereset
--hard
: actualiza elHEAD
y restablece el índice y el directorio de trabajo a la confirmación especificada. Tenga mucho cuidado al utilizar esta opción, ya que cualquier cambio local que no haya realizado se sobrescribirá y se perderá.
Deshacer la última confirmación
Para deshacer la última confirmación sin perder los cambios realizados en los archivos locales y el índice, llame a git reset
con la --soft
seguida de HEAD~1
:
git reset --soft HEAD~1
HEAD~1
es una variable que apunta a la confirmación anterior. El comando anterior mueve la rama actual hacia atrás una confirmación, deshaciendo efectivamente la última confirmación. Si ejecuta el git status
, verá que los archivos modificados se enumeran como cambios no guardados.
Para actualizar el HEAD
para restablecer el índice, ejecute git reset
con --mixed
o sin una opción:
git reset --mixed HEAD~1
git reset HEAD~1
Los archivos modificados se conservan, pero a diferencia del ejemplo anterior, los cambios ahora no están preparados para su confirmación.
Si no desea conservar los cambios realizados en los archivos, llame al git reset
con la opción --hard
git reset --hard HEAD~1
Antes de realizar un restablecimiento completo, asegúrese de que ya no necesita los cambios.
Deshacer múltiples confirmaciones
Con git reset
, puedes volver a cualquier confirmación anterior.
Por ejemplo, para mover la rama actual hacia atrás tres confirmaciones, usaría:
git reset --hard HEAD~3
Como estamos usando --hard
, el comando anterior eliminará las últimas tres instantáneas del historial de confirmaciones.
Otra forma de volver a una confirmación específica es pasar el ID de confirmación al comando git reset
Use git log --oneline
para encontrar los ID de confirmación:
git log --oneline
El comando mostrará una lista de todas las confirmaciones, incluida la ID y la primera línea del mensaje de confirmación:
42912333 (HEAD -> master) Update changelog
6505778c adding new tests
650862ab new blog post
85a63416 sort configuration file
152032c4 Refactor User class...
Una vez que sepa la ID de la confirmación a la que desea restablecer, pase la ID al comando git reset
git reset --hard 85a63416
Conclusión
Para deshacer la última confirmación, use el comando git reset
No restablezca las confirmaciones transferidas, ya que podría causar muchos problemas a su equipo.