Il comando git revert in Git permette di “rimuovere” dal repository una modifica indesiderata. Poiché, però, Git è pensato per preservare la history di un progetto e l’integrità della cronologia delle revisioni, il comando di revert opera aggiungendo un nuovo commit che è l’esatto opposto del commit che si vuole rimuovere.
Supponiamo di avere un progetto con la seguente history:
$ git log --oneline * 1e6ed4a (HEAD -> master) add second feature * cc7f96f improve performance on first feature * 1e1bf33 add first feature * f6a76e4 initialize project
Ci accorgiamo solo dopo aver implementato la seconda funzionalità del nostro progetto che in realtà il commit con cui abbiamo provato a migliorare le performance ha introdotto un bug in certe condizioni. Vogliamo, quindi, rilasciare una nuova versione senza quell’errore.
In questo caso, se le modifiche effettivamente apportate lo permettono, possiamo eseguire un revert del commit contenente l’errore:
$ git revert cc7f96f $ git log --oneline * 517c168 (HEAD -> master) Revert "improve performance on first feature" * 1e6ed4a add second feature * cc7f96f improve performance on first feature * 1e1bf33 add first feature * f6a76e4 initialize project
Git prende il contenuto del commit indicato nel git revert e lo “inverte”, chiedendo, poi, di indicare solo il messaggio con cui salverà nella history il commit “inverso”