Desfazer git reset --hard com reflog
Os blocos são casos diferentes, não um script único. Escolha o caso do seu repositório. Substitua branches, caminhos e VERIFIED_COMMIT antes de usar. Comandos de cancelamento só valem para sua operação ativa; não execute ambas as alternativas.
Resposta curta
Após git reset --hard, encontre o commit anterior no reflog, confira seu conteúdo e crie uma branch de resgate. O objeto do commit precisa continuar armazenado.
Exemplo e condições
Este fluxo recupera trabalho que foi commitado. O reflog não guarda alterações que existiam apenas no diretório de trabalho.
Inspecione antes de alterar
Evite novos resets, rebases e trocas de branch. Leia git reflog e confira git show antes de mover referências.
git status --short
git reflog --date=iso
git show VERIFIED_COMMITMantenha referência ou checkout separado
Crie rescue/lost-work em VERIFIED_COMMIT. Assim o commit recebe uma referência sem alterar sua branch atual nem sobrescrever os arquivos.
git branch rescue/lost-work VERIFIED_COMMIT
git log -5 --oneline rescue/lost-workPrimeiro fluxo
Revise o histórico e o patch da branch recuperada. Você pode examiná-la em outro checkout ou integrar conscientemente o trabalho necessário.
Escolha o outro resultado deliberadamente
Um reset direto ao commit recuperado altera novamente a branch, o índice e os arquivos. Preserve primeiro o trabalho atual e uma referência de resgate.
Limites e exceções
HEAD@{1} indica uma posição do reflog, não garante o commit correto. ORIG_HEAD pode apontar para a ponta anterior, mas outras operações podem substituí-lo.
Conflitos e limpeza
A expiração do reflog e a remoção de objetos têm políticas configuráveis separadas. Se o objeto foi removido, uma entrada antiga não o reconstrói.
Confira o resultado
Confira o commit, os arquivos e o histórico da branch de resgate. Execute os testes pertinentes antes de integrar as alterações.
git show --stat rescue/lost-work
git status --shortPerguntas frequentes
git revert cria um commit inverso e não devolve a branch à posição anterior. Para conteúdo apenas preparado, git fsck pode encontrar blobs, sem garantir nomes ou estrutura.
Revise a operação no FluxGit
O FluxGit reúne movimentos do reflog e pontos de restauração na Safety Timeline. Com a função habilitada e alterações locais detectadas, um reset coberto pode salvar um stash de segurança; o reset no terminal do tutorial não usa essa proteção.
Referências oficiais do Git
Desfazer git reset --hard: recupere seu commit perdido
Recupere uma alteração commitada após git reset --hard usando o reflog local enquanto o objeto do commit ainda estiver disponível. A recuperação não é garantida após a expiração do reflog ou a limpeza dos objetos.
Assistir no YouTube — abre uma nova aba
Gravado em um repositório de teste.
Ler a transcrição da narração
- Você executou git reset --hard e seu último commit desapareceu. Todo mundo faz isso uma vez. Veja como recuperá-lo e por que funciona.
- Primeiro, uma alteração já commitada: tentar a chamada de pagamento mais duas vezes.
- Depois, no terminal: git reset --hard HEAD~1.
- O FluxGit percebe na hora. A branch voltou para um commit anterior, e aquele commit já não está nela.
- Veja por que ele não foi perdido. Uma branch é apenas um rótulo em um commit. O reset move o rótulo para trás, mas o commit continua no repositório, e o reflog, o diário do Git, ainda o lista. Crie uma branch nele, e ele estará de volta.
- No FluxGit, Recover lost work explica isso em palavras simples e leva você ao lugar certo.
- A Safety Timeline mostra o reset em uma frase. A partir do momento anterior ao reset, crie uma branch.
- Seu commit está de volta, em sua própria branch.
- O trabalho sem commit não aparece no reflog. Com os pontos de restauração ativados e alterações locais detectadas, o FluxGit pode salvar um stash de segurança antes de um reset hard. Este reset executado diretamente no terminal do Git ignora essa proteção.
- O mesmo no terminal: git reflog, encontre a linha anterior ao reset e crie uma branch naquele commit.
- Recapitulando. Um reset move um rótulo. O reflog lembra onde ele estava. Crie uma branch para preservar o commit. Próxima aula: recuperar uma branch excluída.