Como voltar ao último commit do histórico depois de usar o git reset para ir para um conjunto de alterações mais antigo?
Pergunta
Suponha que minha história seja assim:
A - B - C - D (mestre)
Se eu fizer git reset B
, eu vou ter:
A - B (mestre)
O problema é, git log
agora mostre-me apenas a história de A a B, e não consigo mais ver C e D.
Como posso voltar para D?
Solução
Você deve poder ver D com git reflog
.
Veja isso artigo, por exemplo.
A única vez que os compromissos são realmente excluídos é se você git gc --prune (então tenha cuidado com isso!).
Se você executar o Git Reflogue agora em um repositório em que trabalha, verá muitas mudanças que se parecem mais assim:
c5c3a82... HEAD@{0}: pull origin featureB: Merge made by recursive.
49d0608... HEAD@{1}: reset --hard HEAD^: updating HEAD
3ed01b1... HEAD@{2}: pull origin featureA: Merge made by recursive.
49d0608... HEAD@{3}: pull origin bugfixJ: Merge made by recursive.
854d44e... HEAD@{4}: commit: Add more cowbell to foo.c
6dbc22d... HEAD@{5}: pull origin bugfixI: Merge made by recursive.
9bdb763... HEAD@{6}: commit: Remove weevils
8518f9d... HEAD@{7}: checkout: moving from wickedfeature to master
Essas linhas podem ser divididas em 4 partes:
- cometer hash,
- cometer ponteiro,
- ação,
- e informações extras.
Se quiséssemos recuperar o compromisso que foi perdido em
HEAD@{1}
, nós poderíamos apenasgit reset --hard HEAD@{2}
.
Agora, nossa filial atual (e cópia de trabalho) está definida como o estado do repositório antes de fazer a redefinição.Se quiséssemos apenas ver o que era esse estado, poderíamos
git checkout -b temp HEAD@{2}
(ougit checkout HEAD@{2}
Se você tem o Git 1.5.0 ou mais).
Outras dicas
Ok, encontrei.
Você pode usar git reflog
.
Eu não sabia para que servia, mas agora posso ver que é um registro de todas as referências que HEAD tem apontado.