Detached HEAD no Git: preserve os commits
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
Detached HEAD significa que HEAD aponta diretamente para um commit, sem acompanhar uma branch local. Você pode inspecionar, compilar e criar commits. Para manter trabalho novo, crie uma branch nomeada no commit atual antes de sair. O checkout separado não é perda de dados; deixar commits novos sem uma referência duradoura cria o problema.
Exemplo e condições
O exemplo usa um checkout temporário de uma versão antiga e dois commits a preservar como correção. Isso difere de um rebase ativo ou de um submódulo, que pode ficar separado de propósito. Leia status e conclua ou aborte conscientemente a operação ativa antes de usar este fluxo.
Inspecione antes de alterar
No caso separado comum, branch --show-current fica vazio. Status explica o estado e log mostra o histórico confirmado atual. Anote o ID de HEAD. Um nome vazio não significa ausência de branches ou arquivos não rastreados: a referência e o conteúdo da árvore respondem a perguntas diferentes.
git status
git branch --show-current
git log -3 --oneline
git rev-parse HEADMantenha referência ou checkout separado
Crie rescue/detached com switch -c enquanto estiver no commit desejado. A nova branch mantém esse histórico acessível, mas não transforma alterações locais em commit. Revise e confirme essas alterações separadamente quando apropriado. Use um nome novo, sem substituir uma branch existente por uma opção de força.
git switch -c rescue/detached
git branch --show-currentPrimeiro fluxo
Confira nome da branch, commits e patch. Continue nela ou integre a correção por merge ou cherry-pick: cherry-pick copia a alteração em outro commit; merge une históricos. Escolha pelo objetivo e confira o resultado. Sair de detached HEAD com segurança não exige push automático.
git log -3 --oneline --decorate
git show --stat HEADEscolha o outro resultado deliberadamente
Se já saiu, examine o reflog local e cada candidato com show. Escolha pelo patch e pelo pai e crie rescue/recovered no ID verificado. VERIFIED_COMMIT é um marcador a substituir. HEAD@{1} nem sempre é o commit perdido, pois outras operações alteram qual entrada interessa.
git reflog --date=iso
git show VERIFIED_COMMIT
git branch rescue/recovered VERIFIED_COMMITLimites e exceções
Reflog registra movimentos de referências locais; não é um arquivo remoto. Entradas e objetos inacessíveis podem expirar ou ser removidos. Alterações sem commit nunca foram registradas ali como commits. Procure uma cópia anterior, como backup do editor ou stash conferido, para arquivos não confirmados; não prometa reconstruí-los com reflog.
Conflitos e limpeza
Um submódulo costuma ficar em detached HEAD para consumir o commit fixado pelo pai. Isso é normal para uma dependência. Para desenvolver no filho, crie uma branch dentro daquele repositório e siga seu fluxo de contribuição. Uma branch do pai não nomeia automaticamente commits do filho: as referências e os históricos são separados.
Confira o resultado
Antes de excluir o resgate, confirme que outra branch duradoura ou merge revisado ainda alcança os commits desejados. Confira status e patch no destino e mantenha a referência durante a revisão. Um nome de branch mantém histórico confirmado; não é uma segunda cópia física de todos os arquivos nem prova de testes aprovados.
git log --oneline --decorate rescue/detached
git status --shortPerguntas frequentes
É um erro? Não quando você inspeciona intencionalmente commit, tag ou submódulo fixado. Posso fazer commit? Sim, mas nomeie o histórico antes de sair. Posso recuperar depois? Às vezes, se objetos e evidência local ainda existirem; confira candidatos sem prometer retenção permanente.
Revise a operação no FluxGit
Use o histórico visual e a visão de alterações do FluxGit para revisar a operação e os commits relevantes. Mantenha as verificações de branch, compartilhamento e arquivos locais do exemplo. A página de download apresenta os builds e plataformas disponíveis.