Sinossi
git restore [--staged] [--source=<tree>] [-p] <pathspec>...
Descrizione
Il comando git restore, introdotto in Git 2.23, sostituisce la metà di ripristino file di git checkout. È costruito apposta per due casi: scartare modifiche non in stage nella working tree (comportamento predefinito) e togliere modifiche dall'index (con --staged). La separazione più pulita rende lo strumento meno soggetto a errori di git checkout.
Puoi ripristinare da qualsiasi sorgente: un altro commit, un branch o un tag. Combinato con -p, puoi scegliere interattivamente quali hunk ripristinare. git restore non modifica mai branch o HEAD — tocca solo i file.
Nell'uso quotidiano, git restore si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--staged | Ripristina l'index invece della working tree (cioè toglie dallo stage). |
--worktree | Ripristina la working tree (default). |
--source=<tree> / -s | Ripristina da un commit, branch o tag specifico. |
-p, --patch | Sceglie interattivamente gli hunk da ripristinare. |
--ours / --theirs | Durante un conflitto, ripristina un lato. |
-q, --quiet | Sopprime il progresso. |
Esempi
git restore src/main.c
# Scarta modifiche non in stage in main.c
git restore --staged config.yml
# Toglie dallo stage un file (mantieni le modifiche della working tree)
git restore --source=HEAD~3 README.md
# Riporta indietro README.md come era 3 commit fa
git restore -p
# Sceglie interattivamente gli hunk da scartare
Errori comuni
git restore su un file con modifiche non salvate le sovrascrive silenziosamente — non c'è prompt di conferma e nessun easy undo. Fai prima stash se incerto. I principianti a volte confondono --staged con git reset --hard; --staged tocca solo l'index, lasciando intatte le modifiche della working tree.
Comandi correlati
git reset, git checkout, git stash, git revert