Risposta breve:
git reset 'HEAD@{1}'
Risposta lunga:
Git tiene un registro di tutti gli aggiornamenti di riferimento (es. Checkout, reset, commit, merge). Puoi vederlo digitando:
git reflog
Da qualche parte in questo elenco è il commit che hai perso. Diciamo che hai appena digitato git reset HEAD~
e vuoi annullarlo. Il mio reflog è simile al seguente:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
La prima riga dice che HEAD
0 posizioni fa (in altre parole, la posizione corrente) è 3f6db14; è stato ottenuto ripristinando a HEAD~
. La seconda riga dice che HEAD
1 posizione fa (in altre parole, lo stato prima del reset) è d27924e. È stato ottenuto controllando un particolare commit (anche se non è importante in questo momento). Quindi, per annullare il ripristino, eseguire git reset HEAD@{1}
(o git reset d27924e
).
Se, d'altra parte, hai eseguito altri comandi da allora che aggiornano HEAD, il commit che desideri non sarà in cima all'elenco e dovrai cercare in reflog
.
Un'ultima nota: potrebbe essere più semplice cercare il reflog
ramo specifico che si desidera ripristinare, ad esempio master, piuttosto che HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Questo dovrebbe avere meno rumore rispetto al generale HEAD reflog
.