Por Anónimo (no verificado) , 29 Abril 2026

Los tres árboles

Git rastrea tres "árboles": el commit HEAD, el índice (área de staging), y el árbol de trabajo (tus archivos en disco). git reset mueve el puntero del branch y opcionalmente reescribe el índice y el árbol de trabajo.

--soft: solo mover HEAD

git reset --soft HEAD~1
# Los cambios del último commit quedan staged
git commit -m "Mejor mensaje"

--mixed: también resetear el índice (predeterminado)

git reset HEAD~1
# Equivalente a --mixed; los cambios quedan unstaged pero en tus archivos

--hard: resetear todo

git reset --hard HEAD~1
# El último commit y los cambios del árbol de trabajo desaparecen

Una tabla de decisión

  • ¿Quieres rehacer el último mensaje? --soft HEAD~1 luego commit de nuevo.
  • ¿Quieres unstagear todo? --mixed (o solo git reset).
  • ¿Quieres descartar cambios locales y coincidir con el remote? --hard origin/main.

Resetear un solo archivo

git reset HEAD path/to/file
git checkout -- path/to/file
git restore --staged path/to/file
git restore path/to/file

Reset vs revert

reset reescribe la historia moviendo el puntero del branch. revert crea un nuevo commit que deshace uno previo. Usa revert en branches compartidos.

Recuperar de un mal --hard

git reflog
git reset --hard HEAD@{1}