Vai al contenuto principale

Git Annulla Ultimo Commit: guida passo passo per principianti

Questa guida ti insegna come annullare in sicurezza il tuo ultimo commit Git usando i comandi e gli strumenti corretti, che tu stia lavorando da solo o in team.
Aggiornato 16 apr 2026  · 10 min leggi

Se hai mai lavorato a un progetto di programmazione di gruppo, sai quanto in fretta le cose possono complicarsi quando provi ad annullare una modifica. Una mossa sbagliata e potresti cancellare il tuo lavoro o, peggio, rompere qualcosa che un compagno di squadra ha appena pushato.

Ecco perché è così importante capire cosa offre Git per annullare gli errori e quando usare ciascuna opzione. Alcuni comandi sono sicuri in ambienti di team, mentre altri sono più adatti alla pulizia locale dove va bene riscrivere la cronologia.

Questa guida ti accompagna passo passo. Imparerai i diversi modi per annullare i commit, come funzionano e quale scegliere a seconda della situazione.

Capire la cronologia dei commit in Git 

Hai mai premuto "Ctrl+S" per salvare una versione di un documento e tornarci più tardi? È esattamente ciò che fa un commit Git, ma per l’intera codebase.

Che cos’è un commit in Git?

Un git commit è l’istantanea del tuo progetto in un momento preciso. Congela lo stato attuale di tutti i tuoi file e assegna a quella versione un ID univoco, come scattare una foto con timestamp del tuo codice. Puoi sempre tornare a quel punto se qualcosa si rompe in seguito.

Come funziona? Quando modifichi un file nel tuo repo, le modifiche non vengono salvate immediatamente. Esistono invece localmente nella tua directory di lavoro corrente. Per salvarle, queste modifiche vengono messe in stage e poi committate nel repository. La cronologia dei commit è il registro di tutti i commit eseguiti su un repository. 

Commit locali vs remoti

I commit locali restano sulla tua macchina e non sono visibili a colleghi o collaboratori finché non decidi di condividerli. Questo significa che hai più controllo su di essi: puoi riscrivere la cronologia, squashare, eliminare o resettare senza influenzare nessun altro.

I commit remoti, invece, sono accessibili a chiunque lavori sul repository. Ciò significa che non dovresti riscrivere o eliminare questi commit. Farlo crea problemi ai tuoi compagni di squadra se stanno usando lo stesso branch remoto. Quindi, sii cauto e consapevole di ciò che stai facendo prima di riscrivere una cronologia condivisa. 

Annullare l’ultimo commit Git in locale

In Git, HEAD punta all’ultimo commit nella cronologia del tuo progetto. Quando usi il comando git reset, stai dicendo a Git di spostare quel puntatore a un commit diverso. 

Vediamo come usare git reset per annullare l’ultimo commit in vari scenari.

Usare git reset --soft HEAD~1

Sposta HEAD indietro di un commit ma lascia le modifiche nell’area di stage. I tuoi file non vengono toccati e tutto ciò che avevi committato resta in coda nell’area di stage. Usalo quando vuoi annullare il commit in sé ma tenere tutte le modifiche pronte e in stage.

Usare git reset --mixed HEAD~1

Questo va oltre. Inoltre sposta HEAD indietro di un commit ma svuota l’area di stage. I tuoi file restano nella directory di lavoro, ma nulla è più in stage. Questa è la modalità predefinita di git reset.

Usare git reset --head HEAD~1

Sposta HEAD indietro, svuota l’area di stage e cancella le modifiche nella tua directory di lavoro. È come se l’ultimo commit (e tutte le sue modifiche) non fossero mai esistiti.

Usalo con cautela: una volta che quelle modifiche sono sparite, è difficile recuperarle. Quindi eseguilo solo se sei assolutamente sicuro di non aver bisogno di nulla da quell’ultimo commit.

Esempio 1: annullare l’ultimo commit in locale (rifinitura sicura)

Diciamo che hai appena fatto un commit, ma ti accorgi di aver dimenticato di aggiornare il file README.

Scenario:

Hai committato modifiche a main.py, ma hai dimenticato di aggiornare README.md. Vuoi correggere l’ultimo commit senza influenzare nessun altro e non hai ancora fatto push.

Soluzione:

Usa git reset --soft HEAD~1 per annullare il commit e mantenere le modifiche in stage:

git reset --soft HEAD~1

Ora aggiorna il file README, aggiungilo allo stage e rifai il commit di tutto:

git add README.md
git commit -m "Update main.py and README.md"

✅ Perché funziona: dato che il commit non è stato pushato, puoi riscrivere la cronologia locale senza impattare nessuno.

Annullare un commit pushato

Hai fatto push di un commit... e ora te ne penti. È capitato a tutti. Ma come lo annulli senza rompere il lavoro dei tuoi colleghi? 

Riscrivere la cronologia con git push --force

Normalmente, Git ti permette di fare push solo se il tuo branch locale è stato di recente pullato ed è aggiornato con quello remoto. Ma puoi scavalcare questa regola usando un comando superpotente come push --force. Sovrascrive l’intera cronologia remota con ciò che c’è nel tuo branch locale.

Ecco perché --force è potente ma pericoloso. In un contesto di team, può eliminare i commit dei tuoi colleghi se non sono stati pullati nel tuo branch locale. Usalo solo quando sai esattamente cosa stai facendo — e idealmente quando sei l’unico a lavorare su quel repo.

Oltre a push --force, c’è anche pull --force, un altro comando potente da usare con cautela. Scopri di più qui.

Alternative più sicure con git revert

Se vuoi annullare un commit senza eliminare la cronologia, git revert è la scelta migliore. Non rimuove il commit; crea un nuovo commit che annulla le modifiche.

Mettiamo che tu abbia committato un file chiamato streamlit_app.py e voglia eliminarlo. git revert genererà un nuovo commit che cancella solo quel file, lasciando intatta il resto della cronologia.

Per impostazione predefinita, git revert prende di mira il commit più recente. Tuttavia, puoi anche revertare commit più vecchi specificando il loro ID.

Esempio 2: annullare in sicurezza un commit pushato su un branch condiviso

Diciamo che hai pushato una modifica di configurazione difettosa e devi invertirla senza cancellare la cronologia.

Scenario:

Hai pushato un commit che aggiunge una riga errata in config.yaml. Il tuo team sta già lavorando sullo stesso branch remoto (main), quindi non puoi usare reset o fare force-push.

Soluzione:

Usa git revert per annullare il commit in sicurezza:

git revert <commit-hash>

Si aprirà un editor di testo per confermare il messaggio di revert. Salva e chiudi l’editor per creare un nuovo commit che annulla il precedente.

Se il commit da revertare è l’ultimo:

git revert HEAD

Poi fai push delle modifiche:

git push origin main

✅ Perché funziona: git revert non riscrive la cronologia — aggiunge un nuovo commit. Questo lo rende sicuro per branch condivisi e flussi di lavoro di team.

Visualizzare e confermare le modifiche

A volte vuoi solo vedere cosa è successo finora — come scorrere le versioni precedenti per trovare quel commit da annullare. Git ti offre strumenti per fare esattamente questo.

Usare git log per controllare la cronologia dei commit 

Esegui git log nel terminale e otterrai l’elenco completo di tutti i commit sul branch corrente. Puoi usarlo per identificare uno specifico commit da annullare o modificare. 

Per esempio: l’output di git log potrebbe essere:

  • e3a1b7f Corretto refuso in README  
  • 4f2c9a1 Aggiunta validazione login  
  • 9d5b3e8 Primo commit  

Ogni riga mostra un hash del commit e un messaggio. Se vuoi mai annullare una modifica specifica, copia quell’hash e usalo con git revert

Usare strumenti GUI o estensioni

Se non sei uno sviluppatore o non hai mai lavorato con il controllo versione, tutte quelle istruzioni da riga di comando possono sembrare una lingua straniera. Ecco dove entrano in gioco gli strumenti GUI. Rendono Git visivo e adatto ai principianti, così puoi concentrarti su ciò che conta senza memorizzare i comandi.

GitHub Desktop 

GitHub Desktop è un’app gratuita che offre un’interfaccia pulita e semplice per lavorare con i tuoi repository GitHub. Una volta installata, puoi usarla per creare branch, fare commit, pushare sul remoto e gestire il tuo progetto, tutto con i clic invece dei comandi Git.

È perfetta se sei alle prime armi con Git o vuoi semplicemente un’esperienza più fluida nella gestione delle modifiche.

Interfaccia utente di GitHub Desktop

Interfaccia utente di GitHub Desktop. Fonte immagine

Sourcetree

Sourcetree è uno strumento Git GUI gratuito per Mac e Windows. Ti offre un modo visivo per gestire branch, commit e merge senza toccare il terminale. È leggero, adatto ai principianti e funziona bene con piattaforme popolari come GitHub, GitLab e Bitbucket. 

Essendo sviluppato da Atlassian, si integra bene anche con altri strumenti Atlassian come Jira, Confluence e Bamboo, rendendolo un’ottima scelta se il tuo team usa già quell’ecosistema.

Interfaccia utente di Sourcetree

Interfaccia utente di Sourcetree. Fonte immagine

GitKraken

GitKraken è una GUI Git ricca di funzionalità che rende fluido e visivo il lavoro con i repository. Il suo punto forte è la vista a grafo — una timeline colorata e interattiva della cronologia del tuo repo che rende branch, merge e commit facili da seguire.

A sinistra vedrai l’albero dei file del progetto. A destra avrai informazioni dettagliate su qualsiasi commit, file o branch su cui fai clic. È intuitivo, adatto ai principianti e ricco di funzionalità potenti anche per gli utenti avanzati.

GitKraken è gratuito per uso personale, ma se lavori in azienda o gestisci repo privati, ti servirà un piano a pagamento.

Interfaccia utente di Gitkraken

Interfaccia utente di Gitkraken. Fonte immagine.

Buone pratiche per annullare i commit Git

Annullare un commit non è qualcosa da temere, finché segui buone pratiche. Vediamo quali sono.

Usa branch per sperimentare

Ogni volta che costruisci qualcosa di nuovo o correggi un bug, crea un branch separato da main. Fai lì tutto il lavoro, testalo a fondo e solo dopo fai il merge nel branch principale.

In questo modo, eventuali errori o rollback restano confinati nel tuo branch senza incasinare il lavoro del resto del team.

Nel dubbio, usa git revert

Poniamo che tu abbia fatto alcuni commit su un branch locale e li abbia accidentalmente pushati sul branch principale. Ops. Ora vuoi annullare uno di quei commit senza rovinare la cronologia condivisa. È qui che git revert ti salva.

Esegui git revert HEAD~1. Questo crea un nuovo commit che annulla le modifiche del penultimo commit (perché HEAD~1 punta a quello). Non cancella nulla, ma inverte le modifiche in modo pulito e tracciabile.

Una volta fatto, non dimenticare di pushare la correzione sul remoto usando git push origin <your-branch-name>.

Nota: se le modifiche sono già state pushate su un branch condiviso, usa git revert. Mantiene intatta la cronologia dei commit e non creerà problemi ai tuoi compagni di squadra.

Documenta le tue modifiche

Non serve aprire una pagina Confluence solo per mantenere la cronologia delle versioni perché Git lo fa già per te. Il trucco è usarlo in modo intelligente.

Parti da messaggi di commit chiari e significativi. Se stai facendo un revert, assicurati che il messaggio spieghi perché lo stai annullando. 

E annota l’ID del commit e un breve riassunto di cosa è cambiato. Di solito è sufficiente per la documentazione.

Collaborare in team 

Quando usi comandi come git reset, rebase o commit --amend su un branch che usano anche altri, stai cambiando la cronologia dei commit. Chi ha pullato la vecchia cronologia ora si troverà dei conflitti. 

Quindi, usa i comandi che riscrivono la cronologia solo su branch locali o di feature. Se devi fare force-push o riscrivere una cronologia condivisa, comunica al team il prima possibile. 

Conclusione 

Git ti dà diversi modi per annullare gli errori; ma sapere quando e come usare ciascuno strumento è ciò che distingue gli sviluppatori sicuri da quelli confusi.

Abbiamo visto come funziona git reset in modalità diverse, quando usare git revert e perché è fondamentale scegliere lo strumento giusto in base alla situazione.

In sintesi:

  • Evita di riscrivere la cronologia dopo aver fatto push su branch condivisi
  • Comunica in anticipo se devi fare force-push
  • Usa git revert per annullare in sicurezza i commit pushati

Per i prossimi passi, scopri come puoi revertare un merge commit qui. Se hai già affrontato le basi e vuoi andare più a fondo, dai un’occhiata al nostro corso intermedio su Git

FAQ

Cosa fa esattamente git reset --soft HEAD~1?

Sposta il puntatore HEAD indietro di un commit ma lascia tutte le modifiche in stage. È perfetto quando vuoi rivedere il commit senza perdere alcun lavoro.

Quando dovrei usare git reset --mixed invece di --soft?

Usa --mixed quando vuoi mantenere le modifiche ai file ma rimuoverle dall’area di stage. È utile per fare correzioni prima di ricommitare.

È pericoloso usare git push --force?

Sì, soprattutto in un ambiente di team. Riscrive la cronologia dei commit sul branch remoto e può cancellare il lavoro dei colleghi se non usato con attenzione.

Qual è la differenza tra git revert e git reset?

git revert aggiunge un nuovo commit che annulla le modifiche senza toccare la cronologia, mentre git reset sposta HEAD e può alterare la cronologia — soprattutto rischioso se pushato.

Posso annullare un commit senza perdere le mie modifiche?

Sì, usa git reset --soft per mantenere le modifiche in stage o --mixed per tenerle nella directory di lavoro.

Qual è il modo più sicuro per annullare un commit in un repo condiviso?

Usa git revert. Preserva la cronologia creando un nuovo commit che inverte le modifiche, evitando conflitti con i compagni di squadra.

Come trovo il commit che voglio annullare?

Usa git log per elencare i commit precedenti. Copia l’hash del commit che vuoi revertare o a cui vuoi resettare.

Strumenti GUI come GitHub Desktop possono fare il revert dei commit?

Sì, gli strumenti GUI offrono modi intuitivi per annullare i commit senza dover ricordare la sintassi da riga di comando. Sono ideali per i principianti.

Cosa succede alla cronologia dei commit dopo un reset?

Con git reset, i commit vengono rimossi dalla tua cronologia — a meno che non siano stati pushati. In tal caso, il remoto conserva comunque una traccia, a meno che tu non faccia force-push.

Va bene modificare (amend) un commit dopo aver fatto push?

No, non senza coordinamento. Fare amend e poi force-push può interrompere il lavoro condiviso. Fallo solo in branch isolati o in progetti individuali.


Srujana Maddula's photo
Author
Srujana Maddula
LinkedIn

Srujana è una tech writer freelance con una laurea quadriennale in Informatica. Scrivere di vari argomenti, tra cui data science, cloud computing, sviluppo, programmazione, sicurezza e molti altri, le viene naturale. Ama la letteratura classica ed esplorare nuove destinazioni.

Argomenti

Approfondisci Git con questi corsi!

Corso

Introduzione a Git

2 h
70.8K
Scopri le basi di Git per gestire le versioni nei tuoi progetti software e dati.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra altroMostra altro