¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Deshacer cambios en Git sin perder trabajo

Después de esta lección: Puedo elegir la forma segura de deshacer un error según dónde está.

Lección de 60 min16 comandosLaboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

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

PalabraQué significa
Restoredevolver un archivo al estado de su último commit
Revertcrear un commit nuevo que anula otro
Resetmover la rama a un commit anterior
Reflogdiario local de los movimientos de HEAD
Historia compartidacommits 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

Comando
git init -q -b main notas

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 nombre de autor

Comando
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

Comando
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

Comando
printf 'tarea 1: leer\ntarea 2: escribir\n' > notas/apuntes.txt

Se 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

Comando
git -C notas add apuntes.txt

Se 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

Comando
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

Comando
printf 'tarea 1: leer\n' > notas/apuntes.txt

Se 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

Comando
git -C notas status --short

Se 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

Comando
git -C notas restore apuntes.txt

Se 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

Comando
cat notas/apuntes.txt

Se 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

Comando
printf 'tarea 1: leer\n' > notas/apuntes.txt

Se 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

Comando
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

Comando
git -C notas revert --no-edit HEAD

Se 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

Comando
git -C notas --no-pager log --format=%s

Se 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

Comando
cat notas/apuntes.txt

Se 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ónLa ramaLo preparadoTus archivos
--softSe mueveSe mantieneSe mantienen
--mixed (la normal)Se mueveSe vacíaSe mantienen
--hardSe mueveSe vacíaSe 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

Comando
git -C notas --no-pager reflog --format=%gs

Se 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.

Sobre este laboratorio y su código: Laboratorio de Git y Gitea: aprende clone, commit y push en un servidor Git propio

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.