Elige según el estado del trabajo
| Situación | Comando | Resultado |
|---|---|---|
| Quitar un archivo del staging | git restore --staged -- file.txt | Conserva los cambios en el archivo. |
| Deshacer el último commit local manteniendo el staging | git reset --soft HEAD~1 | Retrocede la rama un commit. |
| Invertir un commit compartido | git revert <commit> | Añade un commit que invierte el cambio. |
Comprueba git status y git log --oneline -5. Este reset requiere un commit anterior y una rama privada. Un commit de merge necesita otra evaluación: no elijas su padre principal al azar.
Prueba el reset en un repositorio de ejemplo
Usa un directorio nuevo y vacío, fuera del proyecto. El ejercicio crea dos commits, quita el segundo del historial de la rama y mantiene su modificación en el staging.
git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "one\n" > note.txt
git add note.txt
git commit -m "First note"
printf "two\n" >> note.txt
git commit -am "Second line"
git reset --soft HEAD~1
git status --short
git diff --cachedResultado esperado: M note.txt en el estado breve y una línea two añadida en el diff del staging. El archivo conserva las dos líneas.
Evita perder cambios
git reset --hard puede descartar cambios sin commit y sobrescribir rutas no rastreadas que obstaculizan la operación. No hace falta en este ejercicio.
git restore -- file.txt reemplaza cambios fuera del staging; --staged actúa sobre el índice. Si moviste una rama por error, revisa git reflog y crea una rama de recuperación en el commit anterior comprobado. Reflog no recupera todos los cambios sin commit.