A veces, al trabajar 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 necesita hacer es apuntar la HEAD
variable a la instantánea anterior.
Esta guía explica cómo deshacer la última confirmación de Git.
No se recomienda deshacer 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 de tres árboles Git
En Git puedes deshacer los cambios usando el git reset
comando seguido del identificador de confirmación.
git reset
toma argumentos adicionales que le permiten controlar el comportamiento del comando. Para comprender mejor cómo reset
funciona, 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 administra y manipula los siguientes tres árboles:
- El directorio de trabajo: un directorio que incluye todos los subdirectorios y archivos en el sistema de archivos local que está asociado con el repositorio. A menudo se le conoce como un "á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 agregaron al índice con
git add
, para incluirlos en la próxima confirmación. A menudo se le conoce como "área de preparación" o "índice de preparación". - El
HEAD
- Un puntero a su última confirmación en la rama actual.
El git reset
comando tiene tres argumentos que corresponden a los tres árboles:
--soft
- Actualiza elHEAD
puntero a la confirmación dada. El directorio de trabajo y el índice no se modifican.--mixed
- Actualiza elHEAD
puntero y restablece el Índice a la confirmación especificada. El directorio de trabajo se deja intacto. Este es el modo de operación predeterminado delreset
comando.--hard
- Actualiza elHEAD
puntero y restablece el índice y el directorio de trabajo a la confirmación especificada. Tenga mucho cuidado al utilizar esta opción, ya que todos los cambios locales que no haya realizado se sobrescribirán y se perderán.
Deshacer la última confirmación
Para deshacer la última confirmación sin perder los cambios que realizó en los archivos locales y el índice, invoque git reset
con la --soft
opción 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 su última confirmación. Si ejecuta el git status
comando, verá que los archivos modificados se enumeran como cambios no confirmados.
Para actualizar el HEAD
puntero 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 mantienen, pero a diferencia del ejemplo anterior, ahora los cambios no se preparan para la confirmación.
Si no desea conservar los cambios que realizó en los archivos, invoque el git reset
comando con la --hard
opción:
git reset --hard HEAD~1
Antes de realizar un restablecimiento completo, asegúrese de que ya no necesita los cambios.
Deshacer varias confirmaciones
Con git reset
, puede 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 la confirmación al git reset
comando.
Úselo git log --oneline
para encontrar los ID de confirmación:
git log --oneline
El comando mostrará una lista de todas las confirmaciones, incluido el ID y la primera línea del mensaje de confirmación:
32921222 (HEAD -> master) Update changelog
7505724c adding new tests
750862ce new blog post
95a63417 sort configuration file
252032e4 Refactor User class
...
Una vez que sepa la ID de la confirmación que desea restablecer, simplemente pase la ID al git reset
comando:
git reset --hard 95a63417
Conclusión
Para deshacer la última confirmación, use el git reset
comando. No restablezca las confirmaciones forzadas, ya que puede causar muchos problemas a sus colegas.
Si encuentra un problema o tiene comentarios, deje un comentario a continuación.
0 Comentarios