Detached Head, Como sair ileso disso ?
Não é um cenário tão comum, mas nas consultorias da vida, já vi isso acontecer e gerar alguns problemas no trabalho do desenvolvedor.
As vezes queremos voltar em um ponto específico da nossa aplicação para fazer alguma análise. Um modo de fazer isso é identificar o commit que queremos analisar e dar um checkout nele. E é aí que acontece o detached head.
Continuando com o exemplo acima, imagina que você tenha o seguinte histórico no seu repositório:
Agora queremos ver algo no commit 2 que possui a hash f414facf0. Para podermos ver o código daquela versão, podemos fazer um checkout apontando para aquele hash com o seguinte comando:
git checkout f414facf0
Feito isso, o git vai alertar que você está no “estado” detached head, conforme imagem:
Até aqui nenhum problema, pois as vezes queremos apenas ver o código e voltar para a versão normal. O problema começa se começarmos a fazer commits.
O Problema com a Detached Head
A HEAD no git representa a versão que você está trabalhando no momento. Normalmente quando fazemos checkout de uma branch normal, o git automaticamente coloca o ponteiro da HEAD no local certo com a ultima versão daquela branch. E com isso podemos continuar trabalhando sem problemas.
Quando fazemos um checkout em um commit específico e temos a detached head o git não vai posicionar a HEAD no local certo e qualquer commit feito depois disso ficará sem pertencer a uma branch específica.
Não tendo nenhuma branch específica nós poderemos acabar perdendo todo o trabalho feito para tentar resolver o problema identificado pois não conseguiremos fazer um merge desse código alterado na master ou em qualquer outra branch.
Se nesse momento você simplesmente trocar de branch com o comando git checkout, suas alterações serão perdidas.
Caso você esteja nessa situação de Detached Head e queira manter as alterações, devemos criar uma nova branch a partir desse ponto e continuar o trabalho para depois fazer o merge normal.
Para fazer isso, execute o seguinte comando para criar uma nova branch chamada “acerto” e com isso mantermos as alterações realizadas.
git branch acerto “hash”
Pronto, agora você tem seu trabalho salvo e pode continuar a trabalhar sem risco de perder suas alterações.
Espero que tenha gostado e se tiver alguma dúvida específica me manda um e-mail ou deixe nos comentários.
Até a próxima, Claudio Romão
15/01/2020 | Por Claudio Romão | Em Técnico | Tempo de leitura: 2 mins.