Git te deja deshacer casi cualquier error
Deshacer en Git significa volver a un estado anterior de tu proyecto: descartar un cambio, anular un commit o recuperar una versión. Casi todo se puede deshacer, pero cada forma tiene un riesgo distinto.
Borraste por error dos tareas de tus apuntes y guardaste el commit. Según el caso, necesitas un comando u otro.
Al terminar esta lección
Nota
Puedo elegir la forma segura de deshacer un error según dónde está.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Restore | devolver un archivo al estado de su último commit |
| Revert | crear un commit nuevo que anula otro |
| Reset | mover la rama a un commit anterior |
| Reflog | diario local de los movimientos de HEAD |
| Historia compartida | commits que otras personas ya tienen |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Deshacer depende de dónde está el error
Primero pregúntate dónde está el error. Si aún no hiciste commit, el cambio solo está en tu carpeta. Si ya hiciste commit, está en el historial. Si además lo subiste, otras personas lo tienen.
Cuanto más lejos llegó el error, más cuidado necesita el arreglo.
Crea un repositorio de apuntes
git init -q -b main notasSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Fija tu nombre de autor
git -C notas config user.name "Estudiante"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Fija tu correo de autor
git -C notas config user.email "[email protected]"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe los apuntes
printf 'tarea 1: leer\ntarea 2: escribir\n' > notas/apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Prepara el archivo
git -C notas add apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Guarda el commit de partida
git -C notas commit -q -m "Crear los apuntes"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Restore descarta un cambio que no guardaste
Si editaste un archivo y aún no hiciste commit, git restore archivo lo devuelve al estado de su último commit.
Ojo: ese cambio no estaba guardado en ningún sitio. Después de restore, no hay forma de recuperarlo. Es la única operación de esta lección que pierde trabajo de verdad.
Estropea el archivo sin guardar
printf 'tarea 1: leer\n' > notas/apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira el estado en formato corto
git -C notas status --shortSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Descarta el cambio con restore
git -C notas restore apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el archivo recuperado
cat notas/apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Revert anula un commit sin borrar la historia
Si el error ya está en un commit, git revert crea un commit nuevo que hace lo contrario. El commit malo sigue en el historial, y el nuevo lo compensa.
Es la forma segura cuando otras personas ya tienen el commit, porque no reescribe nada de lo que ya compartiste.
Estropea el archivo otra vez
printf 'tarea 1: leer\n' > notas/apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Guarda el error en un commit
git -C notas commit -q -am "Borrar la tarea 2"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Anula ese commit con revert
git -C notas revert --no-edit HEADSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el historial
git -C notas --no-pager log --format=%sSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el archivo recuperado
cat notas/apuntes.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Reset mueve la rama y puede perder commits
El comando git reset mueve la rama a un commit anterior. Según la opción, también cambia lo preparado o tus archivos.
Con --hard descarta tus cambios sin guardar. Si los commits ya se subieron, reescribe una historia que otros tienen. Por eso aquí solo lo describimos.
Qué cambia cada forma de reset
| Opción | La rama | Lo preparado | Tus archivos |
|---|---|---|---|
| --soft | Se mueve | Se mantiene | Se mantienen |
| --mixed (la normal) | Se mueve | Se vacía | Se mantienen |
| --hard | Se mueve | Se vacía | Se pierden los cambios |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El reflog recuerda dónde estuvo HEAD
Git apunta cada movimiento de HEAD en un diario local, el reflog. Si un commit parece perdido tras un reset, el reflog suele guardar su hash durante un tiempo.
El reflog es solo tuyo: no se sube al remoto. Míralo ahora; no cambia nada.
Lee el diario de movimientos
git -C notas --no-pager reflog --format=%gsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que reset es la forma normal de deshacer. Solo es segura con commits que nadie más tiene. Si ya subiste el commit, usa revert, que añade historia en lugar de reescribirla.