Sinopsis
git restore [--staged] [--source=<tree>] [-p] <pathspec>...
Descripción
El comando git restore, introducido en Git 2.23, reemplaza la mitad de restauración de archivos de git checkout. Restaura archivos en el árbol de trabajo (predeterminado) o el index desde una fuente como HEAD, otro commit, o el index. A diferencia de checkout, no cambia branches.
Las invocaciones más comunes son git restore <file> para descartar cambios no staged en un archivo, y git restore --staged <file> para quitar staging. Estas son operaciones diarias que solían requerir comandos más complicados.
En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 para revelar las llamadas plumbing subyacentes.
Entender cómo este comando interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados y a recuperarse de errores.
Opciones comunes
| Opción | Descripción |
|---|---|
--staged | Restore the index instead of the working tree (i.e., unstage). |
--worktree | Restore the working tree (default). |
--source=<tree> / -s | Restore from a specific commit, branch, or tag. |
-p, --patch | Interactively pick hunks to restore. |
--ours / --theirs | During a conflict, restore one side. |
-q, --quiet | Suppress progress. |
Ejemplos
git restore src/main.c
# Discard unstaged changes in main.c
git restore --staged config.yml
# Unstage a file (keep working-tree changes)
git restore --source=HEAD~3 README.md
# Bring back README.md as it was 3 commits ago
git restore -p
# Interactively pick hunks to discard
Errores comunes
git restore on a file with unsaved changes silently overwrites them — there is no confirmation prompt and no easy undo. Stash first if uncertain. Beginners sometimes confuse --staged with git reset --hard; --staged only touches the index, leaving working-tree edits intact.
Comandos relacionados
git reset, git checkout, git stash, git revert