Por que existem os branches e os merges

Publicado em 2026-09-12 por frfrand

Una rama es un puntero de 41 bytes, y eso explica por qué Git cambió la forma de trabajar en equipo. Qué es realmente un conflicto, y la diferencia entre merge y rebase sin religión.

Por que existem os branches e os merges

Antes do Git, criar um branch era uma operação. Em alguns sistemas implicava copiar o projeto inteiro no servidor e podia demorar minutos. A consequência cultural foi que quase ninguém ramificava: se trabalhava tudo no tronco e se rezava.

O Git mudou isso por uma decisão de design muito simples.

Um branch é um ponteiro

Literalmente:

$ cat .git/refs/heads/feature-login a3f91c2e8d4b7a6f9c1e2d3b4a5f6e7d8c9b0a1f

Isso é o branch inteiro. Um arquivo com um hash dentro. 41 bytes.

Criar um branch é escrever esse arquivo. Por isso é instantâneo, por isso não ocupa espaço, e por isso o fluxo de trabalho do Git te empurra a criar um para cada coisa.

Quando você faz um commit estando nesse branch, o arquivo é atualizado com o novo hash. O branch "avança". Nada mais.

O que é realmente um conflito

Há uma ideia equivocada muito difundida: que um conflito significa que o Git não conseguiu fazer o merge.

O Git faz merge automaticamente de quase tudo. Se você tocou no arquivo A e outra pessoa tocou no arquivo B, não há nada a decidir. Se ambos tocaram no mesmo arquivo, mas em partes diferentes, também não.

Um conflito aparece apenas quando duas pessoas alteraram as mesmas linhas de forma diferente. Aí o Git poderia escolher uma, e se recusa, porque escolher errado é pior do que perguntar.

Ver um conflito não é uma falha do processo: é a ferramenta avisando que há uma decisão humana pendente. Equipes que têm conflitos o tempo todo não têm um problema de Git: têm branches que vivem demais e tocam as mesmas coisas.

Merge e rebase, sem religião

As duas integram o trabalho de uma branch em outra. Diferenciam-se no que fica escrito depois.

merge cria um novo commit com dois pais. O histórico fica como aconteceu: duas linhas que se separaram e se juntaram. É honesto e não reescreve nada.

rebase pega seus commits e os reaplica em cima da outra branch, como se você os tivesse feito depois. O histórico fica em linha reta e lê melhor. Mas são commits novos, com hashes novos: os originais ficam órfãos.

Daí sai a única regra que realmente importa:

Não faça rebase em uma branch que outras pessoas já tenham. As cópias delas continuam apontando para os commits antigos, e ao tentar integrar vão aparecer duplicatas e confusão.

Sobre sua própria branch, antes de compartilhá-la, o rebase é excelente: permite limpar commits intermediários do tipo "correção", "agora sim" e "volto atrás".

Uma combinação que funciona muito bem em equipes: rebase para organizar sua branch antes de abrir o pull request, merge para integrá-la.

A parte que mais ajuda e menos se diz

Quase todos os problemas com branches se resolvem antes de existirem, com um costume: branches curtas.

Um ramo de dois dias toca pouco, se integra sem drama e quase nunca gera conflitos. Um ramo de três semanas se torna um projeto de integração em si mesmo.

Se uma tarefa é grande, a resposta não é um ramo longo: é dividir a tarefa em pedaços que possam ser integrados separadamente, mesmo que fiquem atrás de um interruptor desligado.

Por que existem os branches e os merges
Por que existem os branches e os merges
  • Git
  • ramas
  • merge
  • colaboración
  • flujo de trabajo

Continuar lendo

Todos os artigos · Planos VPS