O Que É um Merge no Git?
Um merge combina o histórico de dois branches, trazendo as mudanças de um para o outro e registrando como elas se juntaram.
O merge é como o trabalho feito em um branch se reúne à linha principal. O Git olha para os dois branches, descobre o ancestral comum e combina as mudanças. A maioria dos merges é tranquila, mas entender o que o Git está fazendo ajuda quando um conflito aparece ou quando um gate de CI bloqueia o merge.
Como um merge funciona
O Git encontra o ancestral comum dos dois branches e aplica as mudanças que cada lado fez desde aquele ponto. Se apenas um lado avançou, ele pode fazer fast-forward simplesmente movendo o ponteiro. Se ambos avançaram, ele cria um novo merge commit que tem os dois tips de branch como parents.
Fazendo merge na prática
Você muda para o branch no qual quer fazer merge, depois faz merge do outro branch.
git switch main
git merge feature/checkoutQuando conflitos acontecem
Se ambos os branches mudaram as mesmas linhas de formas incompatíveis, o Git não pode decidir automaticamente e pausa com um conflito. Você o resolve editando as regiões marcadas, fazendo stage do resultado e completando o merge. A maioria dos merges não gera conflito, especialmente quando os branches têm vida curta.
Merges e CI/CD
Em um workflow de pull request, o merge é o momento em que o novo código entra no branch main, então é o lugar natural para impor qualidade. Status checks obrigatórios tornam um merge impossível até a CI passar, e um merge na main muitas vezes dispara um deploy. Ferramentas que testam o resultado mergeado, não apenas o branch, pegam problemas que só aparecem após a combinação.
Mantendo merges limpos
- Faça merge ou rebase frequentemente para que os branches fiquem próximos da main.
- Deixe a CI verificar o resultado do merge, não apenas o branch.
- Use checks obrigatórios para que nada faça merge vermelho.
- Prefira pull requests pequenos para manter conflitos raros e pequenos.
Principais conclusões
- Um merge combina dois branches, fazendo fast-forward ou criando um merge commit.
- Conflitos surgem apenas quando ambos os lados mudam as mesmas linhas de forma incompatível.
- Em CI/CD, merges são onde status checks controlam a entrada de código na main.