Criando, alternando e deletando branches

1. Introdução às branches no Git

No Git, uma branch é essencialmente um ponteiro móvel para um commit específico dentro do histórico do repositório. Imagine uma linha do tempo do seu projeto: cada commit representa um ponto nessa linha, e uma branch é como um marcador que aponta para um desses pontos. Quando você faz um novo commit, a branch automaticamente avança para apontar para o novo commit.

Branches são fundamentais para o fluxo de trabalho moderno de desenvolvimento de software. Elas permitem que desenvolvedores trabalhem simultaneamente em diferentes funcionalidades, correções de bugs ou experimentos sem interferir no código principal. Cada branch funciona como um ambiente isolado, onde você pode fazer alterações sem afetar outras partes do projeto.

Os comandos básicos que você precisa conhecer são:
- git branch – gerencia branches (cria, lista, deleta)
- git checkout – alterna entre branches (modo clássico)
- git switch – alterna entre branches (modo moderno, Git 2.23+)

2. Criando uma nova branch

Para criar uma nova branch a partir do commit atual (onde você está agora), use:

git branch minha-nova-branch

Isso cria um novo ponteiro chamado minha-nova-branch apontando para o mesmo commit da branch atual. Você permanece na branch original até alternar explicitamente.

Para criar uma branch a partir de um commit específico, use:

git branch minha-branch <hash-do-commit>

Por exemplo:

git branch feature-correcao a1b2c3d4

Para criar e já alternar para a nova branch em um único comando, você tem duas opções:

  • Modo clássico:
git checkout -b minha-nova-branch
  • Modo moderno (Git 2.23+):
git switch -c minha-nova-branch

Ambos criam a branch e imediatamente fazem o checkout para ela, economizando um passo.

3. Alternando entre branches

Alternar entre branches é uma operação comum no dia a dia. O método clássico é:

git checkout nome-da-branch

Por exemplo:

git checkout main

A partir do Git 2.23, foi introduzido o comando git switch, que é mais intuitivo e seguro:

git switch nome-da-branch
git switch main

Cuidados ao alternar: Se você tiver mudanças não commitadas no diretório de trabalho, o Git pode se recusar a alternar para evitar perda de dados. Isso é chamado de "conflito de checkout". Para resolver, você pode:

  • Fazer commit das mudanças: git commit -m "mensagem"
  • Guardar temporariamente: git stash
  • Descartar mudanças: git restore . (cuidado, isso perde as alterações)

4. Visualizando branches existentes

Para listar todas as branches locais no seu repositório:

git branch

A branch atual será destacada com um asterisco (*):

* main
  feature-login
  bugfix-correcao

Para ver branches remotas (que existem no servidor):

git branch -r

Para ver todas as branches (locais e remotas):

git branch -a

Para identificar rapidamente a branch atual:

git branch --show-current

Ou use git status para ver informações mais detalhadas, incluindo a branch atual:

git status

5. Deletando branches locais

Para deletar uma branch que já foi mesclada (merged) na branch atual ou em outra branch:

git branch -d nome-da-branch

Se a branch não foi mesclada e você tem certeza que quer deletá-la, force a deleção:

git branch -D nome-da-branch

Para verificar quais branches já foram mescladas na branch atual:

git branch --merged

Para ver branches que ainda não foram mescladas:

git branch --no-merged

Exemplo prático:

git branch --merged
* main
  feature-concluida

git branch -d feature-concluida
Deleted branch feature-concluida (was a1b2c3d).

6. Deletando branches remotas

Para deletar uma branch no repositório remoto:

git push origin --delete nome-da-branch

Alternativamente, você pode usar a sintaxe abreviada:

git push origin :nome-da-branch

O : antes do nome da branch indica "nada" para o lado direito, efetivamente deletando a branch remota.

Após deletar branches remotas, é boa prática sincronizar suas referências locais:

git remote prune origin

Isso remove as referências locais a branches remotas que não existem mais no servidor.

7. Renomeando branches

Para renomear a branch atual em que você está:

git branch -m novo-nome

Para renomear uma branch específica (não precisa estar nela):

git branch -m nome-antigo novo-nome

Renomear uma branch remota é um processo de duas etapas: deletar a antiga e enviar a nova:

git branch -m nome-antigo novo-nome
git push origin --delete nome-antigo
git push origin -u novo-nome

8. Boas práticas e erros comuns

Boas práticas de nomeação:

  • Use prefixos para identificar o tipo de trabalho: feature/, bugfix/, hotfix/, release/
  • Exemplos: feature/login-oauth, bugfix/corrige-css, hotfix/security-patch
  • Mantenha nomes descritivos mas concisos
  • Use hífens ou barras para separar palavras, evite espaços

Erros comuns:

  • Tentar deletar a branch atual: O Git não permite deletar a branch em que você está. Você receberá o erro:
error: Cannot delete branch 'main' checked out at '/caminho/do/projeto'

Solução: alterne para outra branch antes de deletar.

  • Criar branches com nomes duplicados: O Git permite, mas causa confusão. Sempre verifique branches existentes com git branch.

  • Esquecer de mesclar antes de deletar: Use git branch --merged para verificar antes de deletar.

Fluxo recomendado:

  1. Crie uma branch para cada tarefa: git switch -c feature/nova-funcionalidade
  2. Trabalhe e faça commits regularmente
  3. Quando terminar, mescle (merge) na branch principal
  4. Delete a branch local e remota após mesclada
  5. Mantenha o repositório limpo com git remote prune origin

Dominar a criação, alternância e deleção de branches é essencial para um fluxo de trabalho eficiente com Git. Pratique esses comandos regularmente e você ganhará confiança no gerenciamento de branches.

Referências