Introduzione
Supponiamo di stare lavorando a un progetto con Git.
Per errore o distrazione può capitare di creare un commit che non doveva esistere.
In quella situazione bisogna annullarlo nel modo corretto, scegliendo tra due approcci molto diversi.
I comandi principali sono:
- Il comando
revert - Il comando
reset
Comando revert
Il comando revert crea un nuovo commit che annulla le modifiche del commit selezionato.
La forma base è:
git revert <commit to revert>
Vediamo i passaggi.
- Lanciare il comando
git log. - Ricercare il commit che si vuole ripristinare.
- Copiare l'hash del commit da annullare.
- Usare il comando
git revert <commit to revert>.
Esempio.
cd project_with_a_dot_git_foldergit log### Esempio di stampa post git log## commit 2596f783998c8ec230b38a044b49e39d07770901 (HEAD -> main, origin/main)# Author: Foo <foo@bar.com># Date: Tue Apr 9 14:47:17 2024 +0200## Add something bad## commit 2ce5e2e7e36f23673b32ccef7f908f161527142b# Author: Foo <foo@bar.com># Date: Tue Apr 2 23:33:27 2024 +0200## Update somethinggit revert 2ce5e2e7e36f23673b32ccef7f908f161527142b
Dopo l'esecuzione viene creato un nuovo commit che applica le modifiche inverse, senza riscrivere la cronologia esistente.


Comando reset
L'alternativa è il comando reset.
git reset modifica la cronologia locale e va quindi usato con attenzione, soprattutto se i commit sono già stati condivisi. Il comando sposta HEAD al commit indicato; il comportamento dei file e dell'indice dipende dall'opzione scelta.
Soft reset
L'opzione --soft sposta HEAD mantenendo nell'indice le modifiche introdotte dai commit rimossi.
git reset --soft HEAD~1


Hard reset
L'opzione --hard riallinea indice e directory di lavoro al commit indicato, eliminando anche le modifiche locali non salvate.
git reset --hard HEAD~1


Conclusione
git revert è la scelta più sicura per una cronologia già condivisa, perché aggiunge un nuovo commit senza riscrivere quelli esistenti. git reset è utile soprattutto per correggere una cronologia locale, prima che venga pubblicata.
Ultimo aggiornamento
2024-04-15.
Sorgente dell’articolo content/blog/git_revert_commit.
