W3docs

Introdução

Aprenda como os branches do Git funcionam: crie e troque de branches, mescle trabalhos, resolva conflitos e escolha uma estratégia de merge. Com exemplos.

Diagrama geral dos conflitos de merge do Git

Um branch é um ponteiro leve e móvel para um commit. Ele permite que você trabalhe em uma nova funcionalidade, uma correção de bug ou um experimento de forma isolada — sem mexer no código que todos os outros dependem. Quando o trabalho estiver pronto, você mescla o branch de volta para que suas alterações façam parte da linha principal de desenvolvimento.

Esta página é a visão geral da parte de ramificação do livro. Ela apresenta os comandos que você usará para criar, alternar, combinar e deletar branches, além de como lidar com os conflitos que podem surgir quando duas linhas de trabalho alteram o mesmo código. Cada seção tem um link para um capítulo dedicado com detalhes completos. Ao final desta parte, você deverá estar confortável com o fluxo de trabalho cotidiano de ramificação mostrado no exemplo abaixo.

git branch

O comando git branch cria, lista e deleta branches. Ele não alterna entre branches nem mescla um histórico bifurcado de volta — essas são as funções do git checkout e do git merge. Criar um branch simplesmente adiciona um novo ponteiro ao commit em que você está atualmente; ele não copia arquivos nem altera o histórico, por isso a criação de branches no Git é rápida e barata.

git branch              # list local branches (the current one is marked with *)
git branch new-feature  # create a branch called new-feature
git branch -d old-work  # delete a branch that has already been merged

Um branch do Git é melhor entendido como um ponteiro para um snapshot das suas alterações, e não como uma cópia separada do projeto.

git checkout

O comando git checkout alterna branches ou restaura arquivos da árvore de trabalho. Ao alternar, o Git atualiza os arquivos no seu diretório de trabalho para corresponder à versão armazenada no branch de destino e move o ponteiro HEAD — a referência que rastreia "onde você está agora" — para esse branch.

git checkout new-feature      # switch to an existing branch
git checkout -b new-feature   # create new-feature AND switch to it in one step

No Git moderno, você também pode usar o git switch para a parte de alternância de branches deste trabalho; o checkout continua sendo o comando mais amplamente documentado. O atalho -b é a forma que você mais usará ao iniciar um trabalho.

git merge

O comando git merge integra linhas independentes de desenvolvimento em um único branch. Primeiro você faz o checkout do branch que deve receber as alterações, depois mescla o outro branch nele. O Git resolve o merge de uma de duas formas:

  • Fast-forward — se o branch receptor não tiver commits próprios desde que o outro branch divergiu, o Git simplesmente move seu ponteiro para frente. Nenhum novo commit é criado.
  • Merge de três vias — se ambos os branches tiverem novos commits, o Git os combina e registra um merge commit dedicado com dois pais.
git checkout main        # the branch that will receive the work
git merge new-feature    # bring new-feature's commits into main
git branch -d new-feature  # delete the merged branch (now redundant)

merge conflicts

Um merge conflict ocorre quando o Git não consegue combinar dois branches automaticamente — tipicamente quando ambos os branches alteram as mesmas linhas do mesmo arquivo, ou quando um branch deleta um arquivo que o outro modificou. O Git pausa o merge e marca as regiões conflitantes nos arquivos afetados com marcadores de conflito como este:

<<<<<<< HEAD
the change on the current branch
=======
the change coming from the other branch
>>>>>>> new-feature

Você resolve um conflito editando o arquivo para o estado final desejado, removendo os marcadores, depois preparando (staging) e confirmando (commit) o resultado. Trabalhar em branches isolados mantém os conflitos pequenos e pouco frequentes, mas eles são uma parte normal da colaboração — não um sinal de que algo deu errado.

git merge strategies

Quando o trabalho está pronto para ser mesclado na linha principal, o Git aplica uma estratégia de merge — o algoritmo que ele usa para combinar os branches. Se você não especificar uma explicitamente, o Git escolhe um padrão adequado (ort nas versões atuais, anteriormente recursive) com base nos branches envolvidos. Normalmente você nunca precisa definir uma estratégia manualmente; vale saber que elas existem para os casos ocasionais em que uma específica pode ajudar.

Um fluxo de trabalho típico com branches

Reunindo os comandos, uma única funcionalidade geralmente flui assim:

git checkout -b add-login   # 1. branch off main and switch to it
# ... edit files, then ...
git add .
git commit -m "Add login form"
git checkout main           # 2. switch back to the receiving branch
git merge add-login         # 3. integrate the feature
git branch -d add-login     # 4. clean up the merged branch

Para se aprofundar, continue com git branch para o conjunto completo de operações de branch, ou vá direto para o fluxo de trabalho de feature branch para ver esse padrão usado em uma equipe real.

Prática

Prática
Quais são as funcionalidades dos diferentes comandos do Git relacionados a branches?
Quais são as funcionalidades dos diferentes comandos do Git relacionados a branches?
Was this page helpful?