Articolo originale: Git Undo Merge – How to Revert the Last Merge Commit in Git
Il Branching (la ramificazione dello sviluppo di un progetto) è una parte essenziale di Git, in quanto ti permette di lavorare senza manomettere il codice già in produzione.
Quando finisci di lavorare con un branch diverso da main
, vuoi unirlo con il ramo main
con un commit di merge, in modo che le nuove feature o i bug risolti che hai appena inserito diventino effettivi e possano essere mostrati.
Ma cosa succede se finisci di effettuare il merge e ti accorgi di aver dimenticato di fare una cosa? Oppure cosa succede se accidentalmente effettui il merge quando non sei ancora pronto?
Puoi annullare quasi qualsiasi azione in Git. Così, in questo articolo, ti mostrerò come annullare un merge in Git, in modo da ripristinare la situazione precedente all'ultimo commit che hai effettuato.
Come annullare un commit di merge in Git
Puoi usare il comando Git reset per annullare un merge.
Come prima cosa, è necessario controllare l'hash (o id) del commit, da usare per tornare al commit precedente.
Per controllare l'hash, usa il comando git log
oppure git reflog
. git reflog
è una opzione migliore perché le informazioni sono più leggibili con questo comando.

Quando ottieni l'hash del commit a cui vuoi tornare, lancia git reset --hard commit-prima-del-merge
:

Dovresti vedere alcuni elementi essere rimossi dal tuo editor di codice quando lanci il comando.
Se non sei sicuro dell'hash dell'ultimo commit, puoi lanciare il comando git reset --hard HEAD~1
per tornare al commit precedente al merge:

Nota che quando utilizzi il flag --hard
per annullare un merge, qualsiasi cambiamento non salvato in un commit viene annullato.
Un modo migliore per annullare un merge in Git
Dato che i metodi discussi precedentemente annullano le modifiche non salvate in un commit, Git fornisce un flag più sicuro, denominato --merge
.
Per annullare un merge con il flag --merge
, lancia git reflog
per vedere gli hash dei commit, quindi lancia git reset --merge commit-precedente
:

Si può anche usare la keyword HEAD con il flag --merge
lanciando git reset --merge HEAD~1
:

N.B.: Se non ottieni una risposta da questo comando quando usi il flag --merge
, non preoccuparti, funziona.
Conclusione
In questo articolo, hai imparato come annullare un merge in Git, e adesso potrai annullare un merge non voluto o errato e lavorare in Git con maggiore efficienza.
Qui ci sono i punti principali da tenere a mente con i flag --hard
e --merge
quando si usano per annullare un merge: il flag --hard
rimuove le modifiche non salvate in un commit, mentre il flag --merge
mantiene le modifiche non salvate in un commit.
Grazie per aver letto questo articolo!