Resposta curta:
git reset 'HEAD@{1}'
Resposta longa:
O Git mantém um registro de todas as atualizações de ref (por exemplo, checkout, redefinir, confirmar, mesclar). Você pode vê-lo digitando:
git reflog
Em algum lugar nesta lista está o commit que você perdeu. Digamos que você digitou git reset HEAD~
e deseja desfazê-lo. Meu reflog fica assim:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
A primeira linha diz que HEAD
0 posições atrás (em outras palavras, a posição atual) é 3f6db14; foi obtido redefinindo para HEAD~
. A segunda linha diz que HEAD
1 posição atrás (em outras palavras, o estado antes da redefinição) é d27924e. Foi obtido verificando um commit específico (embora isso não seja importante no momento). Portanto, para desfazer a redefinição, execute git reset HEAD@{1}
(ou git reset d27924e
).
Se, por outro lado, você executou alguns outros comandos desde então que atualizam o HEAD, a confirmação que você deseja não estará no topo da lista e será necessário pesquisar no reflog
.
Uma observação final: pode ser mais fácil olhar reflog
para o ramo específico que você deseja restaurar, digamos mestre, em vez de HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Isso deve ter menos ruído do que o geral HEAD reflog
.