Git reset vs git revert: quale usare? Quali sono le differenze tra questi due comandi? In questo articolo ti guiderò nella scelta del comando più adatto alle tue esigenze, spiegandoti le principali differenze e mostrandoti esempi pratici!
Tra le funzionalità avanzate di Git troviamo due comandi fondamentali per alterare la storia del repository: git reset e git revert. Questi comandi permettono di annullare modifiche o ripristinare lo stato precedente con approcci differenti.
La domanda più comune è: quale comando dovrei usare e in quale situazione? Andiamo per gradi: iniziamo con un’introduzione ai due comandi e vediamo poi in dettaglio le differenze.
Ciao, sono Lorenzo Neri, un informatico. Questo articolo fa parte delle soluzioni che condivido sul mio blog, frutto di esperienze personali e lavorative. Spero che possa aiutarti a risolvere un problema che hai incontrato nel tuo percorso.
Iniziamo!
Quali sono le differenze di questi due comandi?
Vediamo le differenze tra questi comandi con un esempio pratico. Partiamo da una situazione comune:

Immaginiamo di avere un repository semplice. Ho aggiunto una seconda riga a un file chiamato “file1.txt”. A un certo punto, mi accorgo che questa riga non è necessaria. L’obiettivo è rimuovere gli effetti del commit che ha introdotto questa modifica.
La prima soluzione che potrebbe venirti in mente è eliminare il commit. Per farlo, puoi utilizzare il comando git reset:
git reset --hard HEAD^
Questo comando rimuove il commit dalla cronologia e ripristina il file al suo stato precedente. L’effetto finale sarà il seguente:

Come puoi vedere, la seconda riga è sparita e il commit non esiste più nella cronologia. Git reset modifica la cronologia, cancellando i commit.
Ora, ripristiniamo la situazione iniziale. Supponiamo di voler rimuovere gli effetti della modifica, ma mantenendo traccia del commit originale nella cronologia. Qui entra in gioco git revert.
git revert HEAD
Ecco cosa accade dopo l’esecuzione di questo comando:
[master df939f0] Revert "aggiungo seconda riga" 1 file changed, 1 deletion(-)
La cronologia ora include un nuovo commit che annulla gli effetti del commit originale, mantenendo però traccia di entrambi. Questo è il risultato:

Git revert non elimina i commit, ma aggiunge un nuovo commit che annulla gli effetti del commit specificato. In questo modo, la cronologia è preservata e allungata.
Quando usare git reset e quando git revert?
Usa git reset quando vuoi eliminare completamente i commit dalla cronologia, ad esempio su un branch locale prima di condividerlo.
Usa git revert quando vuoi annullare modifiche ma mantenere traccia del commit originale nella cronologia, ad esempio su un branch condiviso.
Entrambi i comandi sono utili in base al contesto. È importante comprendere come influenzano la cronologia e la collaborazione nel tuo progetto.
Hai trovato utile questa guida? Condividila con i tuoi colleghi o iscriviti alla mia newsletter per ricevere altri articoli come questo!
