## glossário

O que é Branch?

Branch (ramo) é uma linha de desenvolvimento independente dentro de um repositório Git. Ela permite trabalhar em uma funcionalidade ou correção sem afetar o código principal, isolando mudanças até que estejam prontas para serem integradas.

Tecnicamente, uma branch no Git é apenas um ponteiro móvel para um commit — um arquivo de poucos bytes. É por isso que criar branches é instantâneo e barato, diferente de sistemas antigos em que ramificar copiava o projeto inteiro.

Uma branch é um ponteiro que avança a cada commit
        A---B---C  feat/carrinho
       /
  D---E---F---G  main

# A branch feat/carrinho partiu do commit E.
# main seguiu para F e G de forma independente.
# Nada em feat/carrinho afeta main até a integração.

Operações essenciais

Criando, alternando e integrando
git branch                   # lista as branches locais
git switch -c feat/carrinho  # cria e entra na nova branch
git switch main              # volta para a principal
git merge feat/carrinho      # integra as alterações
git branch -d feat/carrinho  # remove após integrar

git push origin --delete feat/carrinho  # remove no remoto

Estratégias de ramificação

  • Git Flow — branches fixas de develop, release e hotfix além da principal. Estruturado, adequado a produtos com versões e janelas de release.
  • GitHub Flow — apenas main e branches curtas de funcionalidade, integradas via pull request. Simples e alinhado a deploy contínuo.
  • Trunk Based Development — todos integram na principal várias vezes ao dia, com branches vivendo horas. Exige boa cobertura de testes e feature flags.

A tendência atual favorece branches de vida curta. Quanto mais tempo uma branch vive isolada, maior a divergência acumulada e mais dolorosa a integração — exatamente o problema que a integração contínua existe para evitar.

Conflitos: por que acontecem e como resolver

Um conflito surge quando duas branches alteram as mesmas linhas de um arquivo e o Git não consegue decidir qual versão manter. Ele marca o trecho e transfere a decisão para você.

A marcação de conflito no arquivo
<<<<<<< HEAD
const desconto = calcularDesconto(total, 0.10);
=======
const desconto = total * 0.15;
>>>>>>> feat/promocao

# Edite mantendo o que deve permanecer,
# apague as marcações, e então:
git add arquivo.ts
git commit

Como reduzir conflitos

Integre a branch principal na sua com frequência, em vez de acumular divergência por semanas. Mantenha branches pequenas e focadas. E combine com o time a divisão do trabalho para evitar que duas pessoas reescrevam o mesmo arquivo simultaneamente — a maior parte dos conflitos é de coordenação, não de ferramenta.

## faq

Perguntas frequentes

Qual a diferença entre git switch e git checkout?

git checkout é o comando antigo e acumula funções distintas: trocar de branch e restaurar arquivos. Para reduzir a confusão, o Git introduziu git switch (trocar de branch) e git restore (restaurar arquivos). O checkout continua funcionando, mas os novos são mais claros.

Devo apagar a branch depois do merge?

Sim. O histórico dos commits permanece na branch principal, então nada é perdido. Manter branches já integradas apenas polui a lista e dificulta identificar o que está realmente em andamento. Plataformas como GitHub oferecem remoção automática após o merge.

O que é uma branch protegida?

É uma configuração da plataforma que impede push direto em branches críticas como a main, exigindo pull request, aprovações e verificações de CI aprovadas antes do merge. É a forma padrão de garantir que nada entre em produção sem revisão.