Desfazendo o git reset?

Qual é a maneira mais simples de desfazer o

git reset HEAD~ 

comando? Atualmente, a única maneira que posso pensar é fazer um “git clone http: // …” de um repository remoto.

Resposta curta:

 git reset 'HEAD@{1}' 

Resposta longa:

O Git mantém um log de todas as atualizações de ref (por exemplo, checkout, reset, commit, merge). Você pode visualizá-lo digitando:

 git reflog 

Em algum lugar dessa lista está o commit que você perdeu. Digamos que você acabou de digitar git reset HEAD~ e quer desfazê-lo. Meu reflogo é 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; ele foi obtido pela redefinição para HEAD~ . A segunda linha diz que a posição HEAD 1 atrás (em outras palavras, o estado antes da reboot) é d27924e. Ele foi obtido com o check-out de um commit específico (embora isso não seja importante no momento). Então, para desfazer o reset, execute git reset HEAD@{1} (ou git reset d27924e ).

Se, por outro lado, você executar alguns outros comandos desde então que atualizam HEAD, o commit que você quer não estará no topo da lista, e você precisará procurar através do reflog .

Uma nota final: pode ser mais fácil olhar para o reflog para o ramo específico que você deseja redefinir, digamos master, 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 HEAD reflog geral do HEAD reflog .

A velha pergunta e as respostas postadas funcionam muito bem. Eu vou falar com outra opção embora.

git reset ORIG_HEAD

ORIG_HEAD referência ao commit que o HEAD referenciava anteriormente.

Minha situação foi um pouco diferente, eu fiz git reset HEAD~ três vezes.

Para desfazer eu tive que fazer

 git reset HEAD@{3} 

então você deve ser capaz de fazer

 git reset HEAD@{N} 

Mas se você fez git reset usando

 git reset HEAD~3 

você precisará fazer

 git reset HEAD@{1} 

Como {N} representa o número de operações no Reflog. Como Mark apontou nos comentários.

git reflog para obter todas as referências atualizadas.

2. git reset

3 Da próxima vez, evite isso