Comecei a trabalhar em alguns arquivos que eu tinha em um submódulo git em outro projeto. No entanto, como era um sub-módulo git, ele nunca fez check-out de "master" e, em vez disso, apenas fez check-out da cabeça e colocou todos os arquivos na pasta em "no branch".
Agora que fiz algumas alterações acidentalmente nesses arquivos, percebi que estava trabalhando em um submódulo "sem ramificação" do meu projeto.
Como faço para colocar esses arquivos em uma ramificação (como mestre) para que eu possa resgatá-los?
git merge $COMMIT_SHA
vez que estava no outro ramo.O estado "sem ramificação" é chamado de HEAD desanexado. Isso é chamado porque a referência HEAD não está anexada a nenhum ramo, mas está apontando diretamente para uma confirmação. Para anexar HEAD a uma ramificação que aponta para o commit HEAD atual, 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:
Ou, de forma equivalente, usando a notação de reflog
HEAD@{1}
para evitar a criação da ramificação temporária:Usar a ramificação temporária seria uma boa idéia se você não fizesse a mesclagem imediatamente.
Se você deseja sobrescrever uma ramificação existente para apontar para o commit em HEAD, você pode usar
git branch -f branchname && git checkout branchname
. Se a confirmação no HEAD não for baseada na ponta atual do nome da filial, isso resultará em uma alteração sem avanço rápido do nome da filial que você normalmente deseja evitar (é vista como um histórico de reescrita).fonte
Para adicionar às respostas anteriores:
Enquanto você ainda está em um HEAD desanexado, você pode adicionar uma tag:
Isso adicionará uma marca ao commit, que o tornará visível em
gitk
e em outras ferramentas.fonte