Git Undo Commit: annullare un commit
Ultimo aggiornamento
Il modo in cui annulli un commit dipende da quale commit è e dal fatto che tu ne abbia già fatto il push. Un commit più vecchio sepolto nella cronologia, o qualsiasi cosa già condivisa, richiede git revert, che aggiunge un nuovo commit che lo inverte senza riscrivere nulla. Una serie di commit locali recenti si può semplicemente eliminare con git reset. Se ti serve solo annullare il commit più recente, la pagina git undo last commit copre ogni variante di questa correzione veloce.
Prova questi comandi nel terminal playground: una vera shell nel tuo browser, senza installare nulla.
Quale comando usare
| Situazione | Comando |
|---|---|
| Annullare un commit più vecchio, mantenendo tutto ciò che viene dopo | git revert <hash> |
| Annullare un commit già inviato | git revert <hash> |
| Annullare gli ultimi 3 commit locali, mantenendo il lavoro | git reset --soft HEAD~3 |
| Annullare gli ultimi 3 commit locali, scartando il lavoro | git reset --hard HEAD~3 |
| Annullare un intervallo con nuovi commit inversi | git revert HEAD~3..HEAD |
reset vs revert
| Comportamento | git reset | git revert |
|---|---|---|
| Riscrive la cronologia | Sì | No |
| Sicuro sui commit già inviati | No | Sì |
| Crea un nuovo commit | No | Sì |
| Funziona su vecchi commit a metà cronologia | No | Sì |
| Può scartare le modifiche | Sì (--hard) | No |
Esempio pratico
Annulla un commit specifico più vecchio, anche già inviato, senza toccare i commit che sono venuti dopo.
| Passo | Comando | Risultato |
|---|---|---|
| 1 | git log --oneline | Trova l'hash del commit sbagliato (per esempio a1b2c3d) |
| 2 | git revert a1b2c3d | Un nuovo commit lo inverte; i commit successivi restano intatti |
| 3 | git push | Condividi la correzione: nessuna cronologia è stata riscritta |
Domande frequenti su git undo commit
Come annullo un commit più vecchio senza perdere i commit successivi?
git revert <hash>. Il revert crea un nuovo commit che inverte solo quello che indichi: ogni commit successivo resta esattamente com'era. Trova prima l'hash con git log --oneline. Se il revert va in conflitto con modifiche successive, Git si ferma così puoi risolvere ed eseguire git revert --continue.Come annullo più commit insieme?
git reset --soft HEAD~3 rimuove gli ultimi tre mantenendo le loro modifiche in staging (usa --hard per scartarle). Per i commit già inviati, fai invece il revert dell'intervallo: git revert --no-commit HEAD~3..HEAD li inverte tutti e tre, poi un unico git commit registra l'annullamento.Come annullo un commit di cui ho già fatto il push?
git revert <hash> invece di reset. Il revert crea un nuovo commit che annulla le modifiche del commit indicato, lasciando intatta la cronologia. È il modo sicuro per annullare commit condivisi: riscrivere con reset una cronologia già inviata costringe tutti gli altri a riconciliare le proprie copie.