Como Verificar se uma Tag Git Está Associada a um Branch

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se uma tag Git está associada a um branch específico. Exploraremos o comando git branch --contains para identificar quais branches incluem o commit apontado por uma tag.

Você também usará git log para verificar visualmente a presença do commit taggeado dentro do histórico de um branch e testar o comportamento de git branch --contains com branches que não contêm o commit taggeado.

Executar git branch --contains Tag

Nesta etapa, exploraremos como usar o comando git branch --contains com uma tag. Este comando é útil para descobrir quais branches contêm um commit específico e, como as tags apontam para commits específicos, podemos usá-lo para ver quais branches incluem o commit ao qual uma tag aponta.

Primeiro, vamos garantir que estamos no diretório do nosso projeto. Abra seu terminal e navegue até o diretório my-time-machine, caso você ainda não esteja lá:

cd ~/project/my-time-machine

Agora, vamos criar um novo arquivo e fazer um commit. Isso nos dará um novo commit para taggear.

echo "Another message for the future" > message2.txt
git add message2.txt
git commit -m "Add another message"

Você deve ver uma saída semelhante a esta após o commit:

[master a1b2c3d] Add another message
 1 file changed, 1 insertion(+)
 create mode 100644 message2.txt

Agora, vamos criar uma tag para este commit. Vamos chamá-la de v1.0.

git tag v1.0

Este comando cria uma tag leve (lightweight tag) chamada v1.0 apontando para o commit atual.

Para ver quais branches contêm o commit apontado pela tag v1.0, usamos git branch --contains:

git branch --contains v1.0

Como só temos o branch master e criamos a tag no último commit do master, a saída deve mostrar master:

* master

O asterisco (*) indica o branch atualmente verificado (checked out).

Este comando é poderoso porque permite identificar rapidamente quais branches incorporaram um marco específico ou release (lançamento), representado por uma tag.

Usar git log para Verificar o Branch

Nesta etapa, usaremos o comando git log para verificar visualmente se o commit apontado pela nossa tag v1.0 está realmente presente no histórico do branch master. Enquanto git branch --contains nos diz quais branches contêm um commit, git log nos permite ver o histórico de commits em detalhes.

Certifique-se de que você ainda está no diretório ~/project/my-time-machine.

Agora, vamos visualizar o histórico de commits do branch master usando git log. Podemos usar a opção --decorate para mostrar tags e ponteiros de branch.

git log --decorate --oneline

A opção --oneline fornece uma visualização concisa, mostrando cada commit em uma única linha. A opção --decorate mostra as referências (como nomes de branch e tags) que apontam para cada commit.

Você deve ver uma saída semelhante a esta:

a1b2c3d (HEAD -> master, tag: v1.0) Add another message
e4f5g6h Send a message to the future

Nesta saída, você pode ver o hash do commit (a1b2c3d neste exemplo), seguido pela mensagem do commit. Crucialmente, ao lado do commit mais recente, você deve ver (HEAD -> master, tag: v1.0). Isso confirma que o commit mais recente do branch master é o mesmo commit ao qual a tag v1.0 aponta.

Esta confirmação visual usando git log complementa as informações fornecidas por git branch --contains. Ela ajuda você a entender a relação entre branches, tags e commits no histórico do seu projeto.

Lembre-se, git log é uma ferramenta poderosa para explorar a linha do tempo do seu projeto. Você pode usar várias opções para personalizar a saída e encontrar as informações que precisa. Pressione q para sair da visualização do log se estiver em um pager.

Testar Branches Não Relacionados

Nesta etapa, criaremos um novo branch e faremos um commit nele que não é baseado no commit apontado pela nossa tag v1.0. Isso nos ajudará a entender como git branch --contains se comporta com branches que não contêm o commit especificado.

Primeiro, vamos criar um novo branch chamado feature-branch.

git branch feature-branch

Agora, vamos mudar para este novo branch.

git checkout feature-branch

Você deve ver uma saída indicando que você mudou de branch:

Switched to branch 'feature-branch'

Em seguida, vamos fazer um novo commit neste feature-branch. Criaremos um novo arquivo.

echo "This is a new feature" > feature.txt
git add feature.txt
git commit -m "Add new feature file"

Você deve ver uma saída semelhante a esta após o commit:

[feature-branch a1b2c3d] Add new feature file
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

Agora, vamos usar git branch --contains v1.0 novamente. Lembre-se, v1.0 aponta para um commit no branch master, e nosso novo commit no feature-branch é diferente.

git branch --contains v1.0

Desta vez, a saída deve mostrar apenas o branch master:

master

O feature-branch não está listado porque não contém o commit específico ao qual a tag v1.0 aponta. Isso demonstra como git branch --contains identifica com precisão quais branches têm um commit específico em seu histórico.

Isso é útil quando você deseja saber se uma correção de bug (taggeada com uma versão) foi incluída em um branch de release, ou se uma funcionalidade específica (também potencialmente taggeada) foi mesclada em diferentes linhas de desenvolvimento.

Resumo

Neste laboratório, aprendemos como verificar se uma tag Git está associada a um branch. Começamos usando o comando git branch --contains <tag>, que identifica efetivamente os branches que incluem o commit apontado pela tag especificada. Demonstramos isso criando um novo commit, taggeando-o e, em seguida, verificando que o branch master, onde a tag foi criada, foi listado pelo comando.

Em seguida, usamos o comando git log para confirmar visualmente que o commit associado à tag estava presente no histórico do branch, fornecendo uma visão detalhada da linhagem do commit. Finalmente, exploramos como o comando git branch --contains se comporta com branches que não contêm o commit taggeado, reforçando sua utilidade em determinar rapidamente a inclusão de um branch em marcos específicos taggeados.