Ok, primeiro alguns termos um pouco simplificados.
Em git
, a tag
(como muitas outras coisas) é o que se chama de arborizado . É uma maneira de se referir a um ponto na história do projeto. Treeishes podem ser uma tag, um commit, um especificador de data, um especificador ordinal ou muitas outras coisas.
Agora, a branch
é como uma tag, mas é móvel. Quando você está "em" uma ramificação e faz uma consolidação, a ramificação é movida para a nova consolidação que você fez, indicando sua posição atual.
Seu HEAD
ponteiro é para um ramo que é considerado "atual". Geralmente, quando você clona um repositório, HEAD
aponta para o master
qual, por sua vez, aponta para um commit. Quando você faz algo assim git checkout experimental
, alterna HEAD
para apontar para o experimental
ramo que pode apontar para um commit diferente.
Agora a explicação.
Quando você faz a git checkout v2.0
, está alternando para uma confirmação que não é apontada por a branch
. O HEAD
agora está "desanexado" e não está apontando para um ramo. Se você decidir fazer uma confirmação agora (como você pode), não há ponteiro de ramificação a ser atualizado para rastrear essa confirmação. Voltar para outro commit fará com que você perca esse novo commit que você fez. É isso que a mensagem está dizendo.
Normalmente, o que você pode fazer é dizer git checkout -b v2.0-fixes v2.0
. Isso criará um novo ponteiro de ramificação no commit apontado pelo treeish v2.0
(uma tag nesse caso) e depois mudará o seu HEAD
para apontar para isso. Agora, se você fizer commits, será possível rastreá-los (usando o v2.0-fixes
branch) e você poderá trabalhar como faria normalmente. Não há nada de "errado" no que você fez, especialmente se você quiser apenas dar uma olhada no v2.0
código. Se, no entanto, você quiser fazer as alterações que deseja rastrear, precisará de uma ramificação.
Você deve dedicar algum tempo para entender todo o modelo do DAG do git. É surpreendentemente simples e deixa todos os comandos bem claros.