Git, come effettuare il revert ad uno specifico commit

Il sistema di versionamento Git ci consente di ripristinare il codice che stiamo sviluppando ad un commit specifico, senza perdere le attuali modifiche.

Pubblicato da ,
Ultima modifica

In questo articolo vedremo come ripristinare il codice ad un commit specifico.

Creiamo un file nel nostro repository 'miofile.txt'

miofile.txt

Lorem ipsum dolor sit amet consectetur adipiscing elit.

se lanciamo il comando git status avremo un output simile a questo

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        miofile.txt

nothing added to commit but untracked files present (use "git add" to track)

quindi come ci viene suggerito, da CLI lanciamo prima il comando git add per includere il file 'miofile.txt' nel commit, e poi lanciamo il comando git commit

$ git add .

il punto (.) indica che includiamo tutto, ma potevamo anche usare il seguente comando

$ git add miofile.txt

poi effettuiamo il commit

$ git commit -m "Primo commit"
[master (root-commit) dcb5fda] Primo commit
 1 file changed, 1 insertion(+)
 create mode 100644 miofile.txt

Adesso modifichiamo il file 'miofile.txt', aggiungendo altro testo, in modo da poter effettuare la stessa procedura di prima

miofile.txt

Lorem ipsum dolor sit amet consectetur adipiscing elit lobortis volutpat purus, 
aliquet quisque facilisi felis semper mattis commodo cum sapien, 
neque cursus est elementum tristique dictum velit lacus cubilia.

quindi eseguiamo i comandi git add e git commit

$ git add .

e poi

$ git commit -m "Secondo commit"
[master 7daceee] Secondo commit
 1 file changed, 3 insertions(+), 1 deletion(-)

Se lanciamo il comando git log avremo un output simile a questo

$ git log
commit 7daceee51caec5a6b966c8b34720183b5b29ca27 (HEAD -> master)
Author: User <email address>
Date:   Sat Nov 2 13:27:15 2024 +0100

    Secondo commit

commit dcb5fda0442588c51d39007fe9ec97f60abf8190
Author: User <email address>
Date:   Sat Nov 2 13:20:31 2024 +0100

    Primo commit

Per effettuare il ripristino al primo commit, cioè al punto in cui il file di esempio 'miofile.txt' non era stato modificato, usiamo il comando git checkout <hash-commit> dove hash-commit è l'hash del commit che in questo esempio è dcb5fda0442588c51d39007fe9ec97f60abf8190, quindi da CLI lanciamo il seguente comando git checkout dcb5fda0442588c51d39007fe9ec97f60abf8190, avremo un output simile a questo

$ git checkout dcb5fda0442588c51d39007fe9ec97f60abf8190
Note: switching to 'dcb5fda0442588c51d39007fe9ec97f60abf8190'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at dcb5fda Primo commit

successivamente come ci viene suggerito lanciamo il comando git switch -c <new-branch-name> per assegnare un nome al branch, poichè effettuando il checkout si è creato un nuovo branch con nome dcb5fda, quindi da CLI lanciamo il comando

$ git switch -c primo_branch
Switched to a new branch 'primo_branch'

primo_branch è il nome che ho assegnato al branch.