Tema 19: Reset soft, mixed y hard; recuperación
Este curso continúa los temas 1–18. Ya conoces trabajo, índice, commits, ramas y HEAD. git reset <modo> <referencia> cambia la posición de la rama actual —o de HEAD si está separado— y, según el modo, también modifica las otras áreas. Empieza siempre identificando qué quieres conservar.
| Modo | Rama o HEAD | Índice | Trabajo |
|---|---|---|---|
--soft | Se mueve | Se conserva | Se conserva |
--mixed | Se mueve | Se restaura al destino | Se conserva |
--hard | Se mueve | Se restaura al destino | Se restaura al destino |
git reset --soft HEAD~1 deja los cambios del último commit preparados. Sirve para replantear un guardado local. git reset --mixed HEAD~1 conserva el texto pero quita la selección preparada; mixed es el modo predeterminado cuando se omite. git reset --hard HEAD~1 también descarta las diferencias del trabajo seguido por Git.
El antiguo git reset archivo, mencionado en el tema 5, es otra forma: actúa sobre ese camino del índice y no mueve la rama. Para quitar una selección de archivos seguimos prefiriendo git restore --staged archivo.
git reflog registra movimientos locales de referencias. La salida asocia identificadores con posiciones como HEAD@{0} y HEAD@{1}. Si acabas de apartar un commit mediante reset, puedes localizar su identificador y volver a él. Ese registro es local y tiene políticas de caducidad: no es una copia de seguridad permanente.
El reflog puede ayudar a recuperar commits, pero no promete recuperar ediciones que nunca confirmaste. --hard debe practicarse con datos desechables y un objetivo claro. En el reto recuerda primero el identificador original, retrocede y después recupéralo. Aplicar reset sobre historia compartida cambia la referencia local; no elimina silenciosamente versiones del servidor ni resuelve la coordinación del equipo.
Comandos para probar #
1git status 2git log --oneline 3git reflog 4git reset --soft HEAD~1 5git status
Error que conviene evitar #
Usar hard como una limpieza rutinaria o confiar en reflog para recuperar texto nunca confirmado. Elige el modo por las áreas que debe conservar.
Laboratorio local #
Prueba los comandos y observa qué cambia. Puedes reiniciar sin guardar una entrega. Los retos evaluables y el cuestionario están en las actividades de este tema.
Git / práctica local
Reset soft
Aplicar edición cambia el archivo; git add lo prepara.
Historial de commits
Las líneas conectan los commits con sus padres. Los commits que ya no tienen una referencia también permanecen visibles en este laboratorio.
- 0000002: Añade saludo; HEAD → main
- 0000001: Commit inicial;
Comparar trabajo, índice y HEAD
Trabajo
Hola Git
Índice (staging)
Hola Git
HEAD
Hola Git
TERMINAL
Sesión local preparada. Escribe help para consultar los comandos de este tema.
Comandos disponibles y límites
git --version · git config --global <clave> [valor] git init · git status git add <archivo | .> · git commit -m "mensaje" · git log git log --oneline · git switch <rama> (antes: checkout) git restore [--staged] <archivo> · git commit --amend [-m "mensaje" | --no-edit] git switch --detach <commit> · HEAD · HEAD~1 git diff [--staged | <commit> <commit>] git remote [-v] · git remote add <nombre> <URL> · git remote get-url <nombre> · git remote set-url <nombre> <URL> git clone <URL> git push [-u] <remoto> <rama> ssh-keygen -t ed25519 · ssh -T git@github.com (ficticios) git branch [nombre] · git branch -m <nombre> · git branch -d <rama> · git switch -c <rama> git merge [--ff-only] <rama> git merge --no-ff <rama> · git log --graph --all --decorate git merge --abort · editar conflicto, git add y git commit -m "mensaje" git config --global alias.st status · git st git tag [nombre] · git tag -a <nombre> -m "mensaje" · git tag -n · git push origin <tag> git reset --soft|--mixed|--hard <commit> · git reflog help · clear
Sesión en memoria: recargar descarta la práctica. Doscientas acciones como máximo. Dos archivos editables de hasta 250 líneas. Diez ramas como máximo. El modelo no ejecuta comandos reales ni realiza conexiones externas. diff muestra contenido anterior y posterior por archivo.
Resumen
- Solo mueve la posición actual.
- Restaura el índice, pero conserva las ediciones del trabajo.
- Puede ayudarte a localizar un commit apartado de una rama.
- Usar hard como una limpieza rutinaria o confiar en reflog para recuperar texto nunca confirmado. Elige el modo por las áreas que debe conservar.