Menu
Coddy logo textTech

Git Reset

Última actualización

git reset mueve la rama actual a un commit diferente y, según el modo, actualiza el área de preparación (index) y el árbol de trabajo para que coincidan. Los tres modos solo se diferencian en hasta dónde llega esa actualización: --soft mueve la rama y se detiene, --mixed (el predeterminado) también restablece el área de preparación, y --hard además sobrescribe tus archivos de trabajo.

Como --hard descarta el trabajo sin confirmar, ten claro qué modo quieres antes de ejecutarlo. Prueba estos comandos de forma segura en el terminal playground: un shell real en tu navegador.

Los tres modos

ModeMoves branchResets stagingResets working tree
--softNoNo
--mixed (default)No
--hard

Sintaxis

CommandWhat it does
git reset --soft HEAD~1Deshace el último commit, mantiene los cambios en el stage
git reset HEAD~1Deshace el último commit, mantiene los cambios fuera del stage
git reset --hard HEAD~1Deshace el último commit, descarta los cambios
git reset <file>Quita un archivo del stage (conserva sus cambios)
git reset --hard origin/mainFuerza la rama local a coincidir con la remota

Casos comunes

GoalCommand
Quitar todo del stagegit reset
Quitar un archivo del stagegit reset README.md
Retroceder 3 commits, conservando el trabajogit reset --soft HEAD~3
Descartar todos los cambios locales desde un commitgit reset --hard <hash>

Preguntas frecuentes sobre git reset

¿Cuál es la diferencia entre --soft, --mixed y --hard?
Los tres mueven el puntero de tu rama al commit de destino; se diferencian en qué más tocan. --soft no cambia nada más, por lo que tus cambios permanecen en el stage. --mixed (el predeterminado) también limpia el área de preparación, así que los cambios salen del stage pero siguen en tus archivos. --hard además sobrescribe tu árbol de trabajo para que coincida con el commit de destino, descartando los cambios sin confirmar.
¿Cómo quito un archivo del stage con git reset?
Ejecuta git reset <file> (por ejemplo git reset README.md), o git reset sin ruta para quitar todo del stage. Esto elimina el archivo del área de preparación pero conserva tus ediciones en el árbol de trabajo. En versiones más nuevas de Git también puedes usar git restore --staged <file>, que hace lo mismo de forma más explícita.
¿Es reversible git reset --hard?
No desde el árbol de trabajo: --hard descarta los cambios sin confirmar de forma permanente. Sin embargo, el trabajo ya confirmado que hayas eliminado con reset suele poder recuperarse: ejecuta git reflog para encontrar el hash del commit y luego git reset --hard <hash> (o crea una rama en él). Los cambios sin confirmar que nunca se pusieron en el stage ni se confirmaron no se pueden recuperar, así que usa --hard con cuidado.
¿Cuál es la diferencia entre git reset y git revert?
git reset reescribe la historia moviendo la rama hacia atrás, lo cual está bien para commits locales, pero es peligroso en commits que ya has subido. git revert deja la historia intacta y añade un nuevo commit que deshace uno anterior, que es la opción segura para ramas compartidas.
¿Puedo practicar esto en línea?
Sí. Abre el terminal playground para ejecutar git reset en un shell real en tu navegador, sin necesidad de instalar nada. El curso interactivo y gratuito de Git de Coddy también cubre cómo restablecer y deshacer cambios paso a paso.
Coddy programming languages illustration

Aprende Git con Coddy

COMENZAR