Merge e Resolução de Conflitos
Aula 7 de 12
Unindo Branches com Merge
O merge incorpora as alterações de um branch em outro:
# Estar no branch que vai RECEBER as mudanças (ex: main)
git switch main
# Fazer merge do branch feature
git merge feature
Tipos de Merge
Fast-forward (sem commit novo)
Quando o branch destino não teve novos commits:
main: A---B---C
\
feature: D---E
git switch main && git merge feature
Resultado: main → A---B---C---D---E
Merge com 3 vias (cria commit de merge)
Quando ambos os branches avançaram:
main: A---B---C---F
\ \
feature: \---D---E
git switch main && git merge feature
Resultado: main → A---B---C---F---G (commit de merge)
\ /
E
Forçando Merge Commit
# Mesmo quando fast-forward é possível
git merge --no-ff feature
Resolução de Conflitos
Ocorrem quando o mesmo arquivo foi modificado nos dois branches:
Auto-merging arquivo.txt
CONFLICT (content): Merge conflict in arquivo.txt
Automatic merge failed; fix conflicts and then commit the result.
Marcadores de Conflito
<<<<<<< HEAD
alteração no branch atual (main)
=======
alteração no branch que está sendo mergeado (feature)
>>>>>>> feature
Passos para Resolver
# 1. Ver quais arquivos têm conflito
git status
# 2. Editar os arquivos com conflito
# - Manter a versão desejada
# - Remover marcadores <<<<<, =====, >>>>>
# 3. Marcar como resolvido
git add arquivo.txt
# 4. Finalizar o merge
git commit
Ferramentas de Merge
# Visual (configurar ferramenta)
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd "code --wait $MERGED"
# Abrir ferramenta visual
git mergetool
Abortando um Merge
# Se o merge der muito problema
git merge --abort
Conflitos não são erros — são parte natural da colaboração. Entender como resolvê-los é essencial para trabalhar em equipe.