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 HEAD0 posições atrás (em outras palavras, a posição atual) é 3f6db14; foi obtido redefinindo para HEAD~. A segunda linha diz que HEAD1 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 reflogpara 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.