Learn

Volver atrás

Git

checkout, reset, revert, reflog. Las herramientas de rescate cuando has metido la pata.

Requisitos previos

¿Has commiteado código incorrecto, o has destruido tu árbol de archivos con un reset --hard equivocado? Esta lección te muestra los comandos de rescate, ordenados del menos destructivo al más destructivo.

Descartar cambios no commiteados

Si has modificado un archivo pero aún no lo has puesto en stage, y quieres volver a la versión commiteada:

shell
git restore README.md

Si ya pusiste cambios en stage y quieres sacarlos (sin perder el contenido):

shell
git restore --staged README.md

Deshacer un commit con git revert (seguro)

git revert crea un nuevo commit que invierte los efectos del commit objetivo. El historial se preserva, ningún commit existente se elimina. Es el método seguro, especialmente si ya has hecho push.

shell
git revert HEAD

HEAD se refiere al último commit. También puedes pasar un hash: git revert a3f5b6c.

Retroceder en el historial con git reset

git reset mueve el puntero de rama hacia un commit anterior. Existen tres modos, del menos al más destructivo:

Modo --soft: los commits se deshacen, los archivos quedan en stage. Útil para agrupar commits.

shell
git reset --soft HEAD~1

Modo --mixed (por defecto): los commits se deshacen, los archivos salen del stage pero los cambios permanecen.

shell
git reset HEAD~1

Modo --hard: los commits se deshacen y los cambios se ELIMINAN. Irrecuperable sin reflog.

shell
git reset --hard HEAD~1

La red de seguridad: git reflog

git reflog es tu último recurso. Lista todo lo que HEAD ha apuntado en las últimas semanas, incluso después de un reset --hard. Es la memoria secreta de Git.

shell
git reflog

Ves una lista de entradas con identificadores del tipo HEAD@{2}. Para volver a un estado concreto:

shell
git reset --hard HEAD@

Recuperar un archivo de un commit antiguo

Si solo quieres recuperar un archivo en su estado de un commit concreto, sin tocar el resto:

shell
git restore --source a3f5b6c README.md

El archivo vuelve a su estado en el commit a3f5b6c, listo para hacer stage o descartar.

git-scm.com - git reset git-scm.com - git revert git-scm.com - git reflog

Relacionado

Ver también · gitTrabajar con ramas

Marca los pasos para desbloquear lo siguiente

Volver al curso