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 HEADponteiro é para um ramo que é considerado "atual". Geralmente, quando você clona um repositório, HEADaponta para o masterqual, por sua vez, aponta para um commit. Quando você faz algo assim git checkout experimental, alterna HEADpara apontar para o experimentalramo 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 HEADagora 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 HEADpara apontar para isso. Agora, se você fizer commits, será possível rastreá-los (usando o v2.0-fixesbranch) 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.0có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.