O Que É um Conflito de Merge?
Um conflito de merge acontece quando o Git não consegue combinar automaticamente duas alterações porque ambas tocaram nas mesmas linhas de formas incompatíveis.
Um conflito de merge parece alarmante, mas é apenas o Git pedindo uma decisão. Quando duas branches alteram a mesma parte de um arquivo de formas diferentes, o Git não tem como saber qual versão você quer, então ele pausa e marca o ponto para você resolver. Saber ler e corrigir conflitos elimina a maior parte do medo.
Por que os conflitos ocorrem
O Git faz o merge das alterações automaticamente quando elas tocam em partes diferentes de um arquivo. Um conflito surge apenas quando ambas as branches editaram as mesmas linhas, ou uma apagou o que a outra modificou. Quanto mais duas branches divergem e quanto mais tempo vivem separadas, mais provável se torna um conflito.
Lendo os marcadores de conflito
O Git insere marcadores mostrando ambas as versões para que você possa escolher ou combiná-las.
<<<<<<< HEAD
const timeout = 30;
=======
const timeout = 60;
>>>>>>> feature/slow-networkResolvendo um conflito
Você edita o arquivo para a versão que deseja, remove os marcadores, faz stage do resultado e conclui o merge. Ferramentas e editores podem ajudar mostrando os dois lados lado a lado, mas a decisão sobre qual alteração está correta é sempre sua.
Conflitos em CI/CD
O CI não consegue resolver conflitos por você, mas pode detectar as consequências. Algumas plataformas se recusam a fazer merge de um pull request que conflita com a base, e testar o resultado merged no CI revela conflitos lógicos que não são textuais de forma alguma, onde duas alterações se aplicam de forma limpa mas quebram uma à outra.
Reduzindo conflitos
- Mantenha branches de vida curta e faça merge ou rebase com frequência.
- Divida alterações grandes em pull requests menores.
- Coordene quando várias pessoas editam os mesmos arquivos.
- Traga a última main antes de finalizar uma branch.
Principais conclusões
- Um conflito significa que o Git precisa que você escolha entre duas alterações nas mesmas linhas.
- Os marcadores de conflito mostram ambas as versões; você edita, faz stage e conclui o merge.
- Branches curtas e integração frequente mantêm os conflitos raros e pequenos.