Você sabe a diferença conceitual e de usabilidade entre tag e branch no Git?

Resposta curta:

Um branch no Git é um ponteiro móvel para um commit específico que permite o desenvolvimento independente e a integração com a base de código principal, enquanto uma tag é uma marcação estática para uma versão específica na história do Git que fornece uma maneira de referenciar facilmente uma versão estável do código.

O que é Branch no Git

Uma branch no Git é uma forma de separar o trabalho em andamento da base de código principal. Permite que múltiplos desenvolvedores trabalhem em diferentes recursos ou correções de bugs em paralelo, sem afetar a base de código principal. As branches são leves e podem ser facilmente criadas, mescladas e excluídas, tornando-as ideais para o trabalho diário de desenvolvimento.

Ramificações do Git:

Git branches
Git branches

Em um fluxo de trabalho típico de desenvolvimento de software, cada desenvolvedor criará uma branch para sua funcionalidade ou correção de bug. A branch é onde eles fazem seu trabalho e fazem commits para registrar suas alterações. Uma vez que o trabalho estiver concluído, a branch pode ser revisada e testada por outros membros da equipe antes de ser mesclada de volta à base de código principal. Isso permite fácil colaboração e torna possível trabalhar em múltiplas tarefas simultaneamente.

Usar branches desta maneira pode ajudar a manter a base de código principal estável, reduzir conflitos e tornar mais fácil reverter as alterações se necessário. Em geral, é uma boa prática criar uma nova branch para cada peça de trabalho separada e mesclar branches de volta à base de código principal assim que estiverem concluídas.

Para usar branches no Git, você pode criar uma nova branch com o comando git branch e alternar para ela com git checkout. Então, você pode fazer alterações e comitá-las em sua branch. Quando estiver pronto para mesclar suas alterações de volta à base de código principal, você pode usar o comando git merge.

O que é Tag no Git

Um tag Git é uma forma de marcar uma versão específica de sua base de código, fornecendo uma forma de referência fácil a uma versão estável ou ponto específico no histórico do Git. A diferença de uma branch, tags são imutáveis, o que significa que não podem ser alterados após serem criados. Isso os torna úteis para marcar lançamentos (releases), pois fornece uma forma de revertê-los facilmente a um estado conhecido se necessário.

Git Tags
Git Tags

Em um fluxo de trabalho de desenvolvimento de software, tags são geralmente usadas para marcar lançamentos ou marcos específicos. Por exemplo, você pode marcar uma versão do código quando estiver pronta para ser enviada para produção. A tag fornece uma referência permanente àquela versão do código, tornando fácil reverter a essa versão se necessário.

Usar tags desta forma pode ajudar a acompanhar as diferentes versões de sua base de código, tornando mais fácil revertê-los a uma versão anterior se necessário. Em geral, é uma boa prática marcar cada lançamento, para que você tenha um registro permanente da versão específica que foi enviada para produção.

Para usar tags no Git, você pode criar um novo tag com o comando git tag. Em seguida, você pode enviar o tag para seu repositório remoto, para que outros membros da equipe tenham acesso a ele. Quando você quiser revertê-lo para um tag específico, pode usar o comando git checkout para alternar para a versão marcada com a tag.

Git Branch vs Tag

Em resumo:

  • a tag (etiqueta),é apenas uma marcação, em geral, dentro de um branch específico que define uma situação em um determinado momento.
  • o branch (ramo), tradicional é uma ramificação, ou organização experimental, em paralelo a outro(s) ramo(s) que potencialmente será incorporado ao desenvolvimento principal, ou melhor especificando, ao branch principal (main).

A tag costuma marcar um release (lançamento), uma versão ou outro marco do projeto similar. Então a tag é apenas um apontador para um commit específico enquanto que um branch é um caminho, um galho de desenvolvimento.

A tag é apenas um nome que se dá para um estado do desenvolvimento. Desta forma torna-se fácil acessar aquele estado sempre que necessário.

No Git não há “custo”; em definir uma tag, elas são uma marcação simbólica e não ocupam espaço no repositório. Você não altera o que está na tag. Ela será usada eventualmente, quando há algum evento importante no desenvolvimento que necessite desta marcação para voltar nela outras vezes. Normalmente este evento é um release.

O trabalho de desenvolvimento sempre é realizado em cima de branches através dos commits.

É no branch que se faz o merge (mesclagem), do estado / alterações anteriores com o que foi desenvolvido “agora”.

Um branch vai sendo acrescido de evoluções do desenvolvimento.

Uma boa prática é a criação de um novo branch, sempre que possível, quando uma nova linha de desenvolvimento vai ser iniciada.

A imagem a seguir mostra visualmente o histórico de um repositório Git com suas Tags e Branches:

Histórico de commits e branchs no Git
Histórico de commits e branchs no Git

Pode-se também definir um branch como uma ramificação da sua “árvore” principal de desenvolvimento, geralmente criado para se trabalhar no desenvolvimento de correções ou novas implementações.

Ao ser finalizado o trabalho para aquele contexto, podemos fazer um merge para a ramificação principal do seu projeto.

Conclusões

O branch fica com a responsabilidade de receber as modificações - commits, durante o contexto do desenvolvimento, a cada nova funcionalidade é aconselhável gerar novas branches. Quando o projeto já está maduro e estável é gerada uma nova release que será armazenada ou marcada por uma TAG do repositório.