git restore para coding agents: deshacer un path, no reset --hard
Resumen
git restore copia working tree (o index) desde una fuente. Default: index → disco. --staged: HEAD → index. Un agente no usa git reset --hard. Esta guía cubre restore de un path, --source, y por qué el man page aún dice experimental.

Qué resuelve
Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.
El agente editó el archivo equivocado. El reflejo entrenado es git reset --hard. Eso tira todo el working tree. git restore tira paths. El man page: restaura paths del working tree con contenido de una fuente; si el path está trackeado y no existe en la fuente, lo borra para igualar.
Git documenta restore como experimental (el comportamiento puede cambiar). En la práctica es el comando correcto desde Git 2.23. reset sigue existiendo para mover HEAD.
No sustituye gitignore. El curso instalar un agente no cubre deshacer.
Tres restauraciones
| Quiero | Comando |
|---|---|
| Descartar edits en disco, dejar index | git restore -- path (fuente = index) |
| Sacar del index, dejar disco | git restore --staged -- path (fuente = HEAD) |
| Ambos al HEAD | git restore --staged --worktree -- path |
Default sin --staged: working tree desde el index. Con --staged: index desde HEAD. --source=<tree> para otro commit.
Paths nombrados. Nunca git restore . en un harness autónomo salvo que el humano pidió “tirar todo”.

Lo que el agente no corre
git reset --hardgit checkout -- .(el viejo restore; fácil de confundir con cambiar de rama)git restorede un untracked: no lo borra. Untracked se quita congit clean— otro comando, otro permiso.restorede.env“para probar”: no.
--patch es interactivo: no en headless.
Si restore elimina un path porque no está en la fuente, es el diseño. Confirma con git status después.
Receta
git status
git restore -- src/lib/foo.ts
git status
Si el archivo debía volver al último commit y salir del stage:
git restore --staged --worktree -- src/lib/foo.ts
Worktrees: restore actúa en este worktree. No toca el principal.

FAQ
¿git checkout file? Deprecated para esto. restore.
¿Revert? Crea un commit inverso. Otra operación. No es restore.
¿Experimental? El man lo dice. Sigue siendo más seguro que hard reset.
¿Untracked? git clean -n primero (dry-run). clean -f solo con OK humano.
reset --hard además mueve HEAD si le pasas un commit. restore no mueve HEAD. Por eso es el undo de archivos, no de historia. El agente que “deshace el último commit” necesita reset --soft o revert — y eso es otro ticket.
Verificado 2026-09-03 contra git help restore (source, staged/worktree, experimental).
Lecturas relacionadas
Sigue explorando Coding Agents y otras piezas para builders.

git status para coding agents: porcelain, XY, no el long

Reusable workflows: workflow_call, no copies el YAML entre repos

schedule (cron) en GitHub Actions: UTC, no cada minuto
