Sinossi
git reset [--soft | --mixed | --hard] [<commit>]
git reset [<commit>] [--] <pathspec>...
Descrizione
Il comando git reset sposta il puntatore del branch corrente a un commit specificato, opzionalmente aggiornando l'index e la working tree. Ha tre modalità principali: --soft (sposta solo HEAD), --mixed (default; resetta anche l'index) e --hard (resetta anche la working tree, scartando tutte le modifiche).
Reset è uno dei comandi Git più potenti e più pericolosi. git reset --hard può perdere il lavoro permanentemente — anche se git reflog di solito permette il recupero entro la finestra del reflog. Con argomenti path, reset opera solo sull'index per quei path e non sposta mai HEAD.
Nell'uso quotidiano, git reset si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
--soft | Sposta solo HEAD; index e working tree invariati. |
--mixed (default) | Sposta HEAD e resetta l'index; working tree invariata. |
--hard | Sposta HEAD, resetta l'index e sovrascrive la working tree. |
--keep | Come --hard, ma aborta se modifiche locali andrebbero perse. |
--merge | Resetta l'index e aggiorna i file che differiscono tra HEAD e target, mantenendo i merge locali. |
-p | Seleziona interattivamente gli hunk da togliere dallo stage. |
Esempi
git reset HEAD~1
# Torna indietro di un commit; mantiene le modifiche nella working tree
git reset --soft HEAD~3
# Combina gli ultimi 3 commit in una singola modifica in stage
git reset --hard origin/main
# Scarta TUTTI i commit e modifiche locali (pericoloso)
git reset HEAD config.yml
# Toglie un singolo file dallo stage (sintassi più vecchia per git restore --staged)
Errori comuni
git reset --hard su un branch con commit non pushati li perde. Il reflog può salvarti entro ~90 giorni, ma solo se sai dove guardare. Confondere git reset HEAD file (toglie dallo stage) con git reset --hard (distrugge) è un classico errore da principiante. Git moderno fornisce git restore --staged come alternativa più chiara.
Comandi correlati
git restore, git revert, git reflog, git stash