Explorador
Chuleta

Deshacer cambios

Qué comando usar según dónde esté el cambio que se quiere deshacer, de un archivo sin guardar a un commit ya publicado.

Actualizado el

En esta guía

Qué usar en cada caso

Situación Comando
Descartar los cambios de un archivo sin guardar git restore archivo
Sacar un archivo de staging git restore --staged archivo
Corregir el mensaje del último commit git commit --amend -m "Nuevo mensaje"
Añadir un archivo olvidado al último commit git add archivo && git commit --amend --no-edit
Deshacer el último commit conservando los cambios git reset --soft HEAD~1
Deshacer un commit que ya se subió git revert <hash>
Guardar cambios a medias para cambiar de rama git stash
Recuperar algo que parecía perdido git reflog

git restore archivo y git reset --hard descartan cambios que no están en ningún commit. Eso no se puede recuperar.

Los tres modos de reset

git reset mueve la rama actual a otro commit. El modo decide qué pasa con los cambios:

Modo Historial Staging Archivos en disco
--soft Retrocede Conserva los cambios No se tocan
--mixed (por defecto) Retrocede Se vacía No se tocan
--hard Retrocede Se vacía Se pierden los cambios
git reset --soft HEAD~1     # deshace el commit, los cambios quedan en staging
git reset HEAD~1            # deshace el commit, los cambios quedan sin preparar
git reset --hard HEAD~1     # deshace el commit y borra los cambios

HEAD~1 es “el commit anterior al actual”. HEAD~3 son tres hacia atrás.

Revert: deshacer sin reescribir

git revert <hash>

Crea un commit nuevo que aplica lo contrario del commit indicado. El historial no se reescribe, así que es la forma segura de deshacer algo que ya está en una rama compartida.

reset revert
Historial Lo reescribe Añade un commit
Commits ya subidos No usar Seguro

Amend: corregir el último commit

git commit --amend -m "Mensaje corregido"
git add olvidado.txt && git commit --amend --no-edit

Reemplaza el último commit por uno nuevo, con otro hash. Solo conviene si ese commit todavía no se subió.

Stash: guardar cambios a medias

Comando Qué hace
git stash Guarda los cambios sin commitear y limpia el directorio
git stash -u Incluye también los archivos nuevos
git stash list Lista lo guardado
git stash pop Recupera lo último y lo quita de la lista
git stash apply Lo recupera y lo deja en la lista
git stash drop Descarta lo último guardado

Reflog: la red de seguridad

git reflog

Muestra todos los lugares por los que pasó HEAD, incluidos commits que ya no están en ninguna rama tras un reset o un rebase. Con el hash a la vista se recupera:

git switch -c rescate <hash>

Mientras algo haya llegado a estar en un commit, casi siempre se puede recuperar con el reflog.

Limpiar archivos sin seguimiento

git clean -n      # muestra qué borraría, sin borrar nada
git clean -fd     # borra archivos y carpetas sin seguimiento