kb.erickguedes.com
Git Completo: do Básico à Certificação

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.