Depende do que você deseja fazer ao finalizar o commit. Se tudo o que você está fazendo é verificar para que possa construir ou testar essa revisão, não há nada de errado em trabalhar com um cabeçote destacado. Apenas lembre-se de verificar um branch real antes de fazer qualquer commit ( git checkout masterpor exemplo), para que você não crie commits que não estão incluídos em nenhum branch.
Se, no entanto, você deseja fazer mais commits a partir desse ponto, você deve criar um branch. Se você fizer commits que não são referenciados por um branch, eles podem facilmente se perder e, eventualmente, serão limpos pelo coletor de lixo do git, já que nada se refere a eles. Você pode criar um novo branch executando:
git checkout -b newbranch ea3d5ed
Para ajudar a visualizar, aqui estão alguns diagramas que demonstram como trabalhar em um cabeçote destacado difere de trabalhar em um galho.
Vamos começar com 3 commits em master, A, B e C. masteré o branch atual, então HEADaponta para master, que aponta para o commit C.
abc
* - * - * <- mestre <- CABEÇA
Agora, se fizermos um commit, git criará um commit que tem C como pai (porque esse é o commit atual, apontado por HEADvia master), e atualizará masterpara apontar para esse novo commit. Todos os nossos commits estão agora ativados mastere HEADapontam para o novo commit master.
ABCD
* - * - * - * <- mestre <- CABEÇA
Agora vamos verificar B, nos dando um destacado HEAD.
ABCD
* - * - * - * <- mestre
^
\ - CABEÇA
Tudo funciona bem aqui; podemos ver todos os arquivos, construir nosso programa, testá-lo, etc. Podemos até criar novos commits; mas se fizermos isso, não há nenhum branch no qual estamos, então não podemos apontar nenhum branch para aquele novo commit. A única coisa que aponta para isso é HEAD:
ABCD
* - * - * - * <- mestre
\
* <- CABEÇA
E
Se mais tarde decidirmos fazer check-out masternovamente, não haverá nada referente a E.
ABCD
* - * - * - * <- mestre <- CABEÇA
\
*
E
Já que não há nada referindo-se a isso, pode ser difícil de encontrar, e git considera os commits sem referências a serem abandonados (eles acontecem muito comumente se você rebase, ou esmaga patches, ou faz outra manipulação divertida de histórico; eles geralmente representam patches abandonados que você não se preocupa mais). Depois de um certo tempo, o git irá considerá-lo lixo, para ser descartado na próxima vez que a coleta de lixo for executada.
Então, ao invés de fazer check-out de uma revisão simples e obter uma cabeça separada, se você sentir que vai fazer mais commits, você deve usar git checkout -b branch Bpara criar um branch e fazer o check-out. Agora seus commits não serão perdidos, pois eles serão incluídos em um branch, ao qual você pode facilmente consultar e fundir mais tarde.
ABCD
* - * - * - * <- mestre
^
\ - branch <- HEAD
Se você esquecer de fazer isso e criar commits de um branch, não há necessidade de se preocupar. Você pode criar um ramo referindo-se à revisão do cabeçote com git checkout -b branch. Se você já voltou para o masterbranch e percebeu que esqueceu um commit perdido, você pode encontrá-lo usando o git reflog, que irá mostrar um histórico do que os commits HEADapontaram nos últimos dias. Tudo o que ainda está no reflog não será coletado como lixo e, geralmente, as referências são mantidas no reflog por pelo menos 30 dias.