Menu
Coddy logo textTech

Git Reset

Ultimo aggiornamento

git reset sposta il branch corrente su un altro commit e, a seconda della modalità, aggiorna l'area di staging (index) e la directory di lavoro perché gli corrispondano. Le tre modalità si differenziano solo per quanto arriva lontano questo aggiornamento: --soft sposta il branch e si ferma, --mixed (il predefinito) reimposta anche l'area di staging, e --hard sovrascrive anche i tuoi file di lavoro.

Siccome --hard scarta il lavoro non committato, sappi quale modalità ti serve prima di eseguirlo. Sui commit di cui hai già fatto push, preferisci invece git revert. Prova questi comandi in sicurezza nel terminal playground: una vera shell nel tuo browser.

git reset riporta HEAD a un commit precedente; i commit successivi escono dal branch ma restano recuperabili tramite il reflog.

Le tre modalità

ModalitàSposta il branchReimposta lo stagingReimposta la directory di lavoro
--softSìNoNo
--mixed (predefinito)SìSìNo
--hardSìSìSì

Sintassi

ComandoCosa fa
git reset --soft HEAD~1Annulla l'ultimo commit, mantiene le modifiche in staging
git reset HEAD~1Annulla l'ultimo commit, mantiene le modifiche fuori dallo staging
git reset --hard HEAD~1Annulla l'ultimo commit, scarta le modifiche
git reset <file>Toglie un file dallo staging (mantiene le modifiche)
git reset --hard origin/mainForza il branch locale a coincidere con il remote

Casi comuni

ObiettivoComando
Togliere tutto dallo staginggit reset
Togliere un file dallo staginggit reset README.md
Tornare indietro di 3 commit, mantenendo il lavorogit reset --soft HEAD~3
Buttare via tutte le modifiche locali da un certo commitgit reset --hard <hash>

Domande frequenti su git reset

Che differenza c'è tra --soft, --mixed e --hard?
Tutte e tre spostano il puntatore del branch sul commit di destinazione; si differenziano per cos'altro toccano. --soft non cambia nient'altro, quindi le modifiche restano in staging. --mixed (il predefinito) svuota anche l'area di staging, quindi le modifiche escono dallo staging ma restano nei file. --hard sovrascrive anche la directory di lavoro perché corrisponda al commit di destinazione, scartando le modifiche non committate.
Come tolgo un file dallo staging con git reset?
Esegui git reset <file> (per esempio git reset README.md), oppure git reset senza percorso per togliere tutto dallo staging. Il file esce dall'area di staging ma le tue modifiche restano nella directory di lavoro. Nelle versioni più recenti di Git puoi usare anche git restore --staged <file>, che fa la stessa cosa in modo più esplicito.
git reset --hard è reversibile?
Non dalla directory di lavoro: --hard scarta definitivamente le modifiche non committate. Il lavoro committato che hai eliminato con un reset, però, di solito si può recuperare: esegui git reflog per trovare l'hash del commit, poi git reset --hard <hash> (oppure crea un branch lì). Le modifiche mai messe in staging né committate non si possono recuperare, quindi usa --hard con attenzione.
Che differenza c'è tra git reset e git revert?
git reset riscrive la cronologia spostando indietro il branch: va bene per i commit locali, ma è pericoloso sui commit di cui hai già fatto push. git revert lascia intatta la cronologia e aggiunge un nuovo commit che annulla uno precedente, ed è la scelta sicura per i branch condivisi.
Cosa fa git reset --soft HEAD~1?
Annulla l'ultimo commit ma lascia in staging tutto ciò che quel commit aveva modificato. HEAD~1 indica il commit precedente a quello corrente, quindi il branch torna indietro di un passo mentre l'area di staging e la directory di lavoro restano come sono. È il modo più rapido per rifare un commit: correggi i file o il messaggio, poi fai di nuovo il commit. Consulta git undo last commit per le altre opzioni.
Cosa significa HEAD~1?
HEAD è il commit su cui ti trovi, e ~1 indica il suo primo genitore, cioè un commit indietro. HEAD~2 è due commit indietro, e così via. Per un commit normale, HEAD^ equivale a HEAD~1.
Posso esercitarmi online?
Sì. Apri il terminal playground per eseguire git reset in una vera shell nel tuo browser, senza installare nulla. Il corso interattivo gratuito di Git di Coddy spiega anche come fare il reset e annullare le modifiche passo dopo passo.
Illustrazione dei linguaggi di programmazione di Coddy

Impara Git con Coddy

INIZIA