Você pode usar git reflog
para encontrar as confirmações "perdidas":
$ cd submodule_dir
$ git reflog # Find the commit
$ git checkout master
$ git cherry-pick $SHA_OF_MISSING_CMMIT
Comecei a trabalhar em alguns arquivos que eu tinha em um submódulo git em outro projeto. No entanto, como era um submódulo git, ele nunca fez check out de "master" e, em vez disso, verificou a cabeça e colocou todos os arquivos da pasta em "no branch".
Agora que fiz algumas alterações por acidente nesses arquivos, percebi que estava trabalhando em um submódulo "sem ramificação" do meu projeto.
Como faço para colocar esses arquivos em um branch (como master) para resgatá-los?
O estado "sem ramificação" é chamado de HEAD separado. Isso é chamado porque o HEAD ref não está anexado a nenhum branch, em vez disso está apontando diretamente para um commit. Para anexar HEAD a uma ramificação que aponte para a atual consolidação HEAD, use git checkout -b branchname
.
Você pode atualizar com segurança uma ramificação existente para incluir as confirmações no HEAD com esta sequência:
git branch temp
git checkout branchname
git merge temp
git branch -d temp
Ou, de forma equivalente, usando a notação reflog HEAD@{1}
para evitar ter que fazer a ramificação temporária:
git checkout branchname
git merge HEAD@{1}
Usar o ramo temporário seria uma boa ideia se você não fosse fazer a mesclagem imediatamente.
Se você quiser sobrescrever forçadamente uma ramificação existente para apontar para o commit no HEAD, você pode usar git branch -f branchname && git checkout branchname
. Se o commit no HEAD não é baseado na dica atual de branchname , isso resultará em uma mudança não rápida para branchname que você geralmente quer evitar (é visto como uma história de reescrita).
Para adicionar respostas anteriores:
Enquanto você ainda estiver em um HEAD, você pode adicionar uma tag:
git tag <some-tag>
Isso adicionará uma tag ao commit, o que a tornará visível em gitk
e outras ferramentas.