Conflitos de Merge: Sem Pânico - Entenda e Resolva
Conflitos assustam iniciantes, mas após esta seção você os enfrentará com tranquilidade. Vamos explorar por que os conflitos acontecem (o Git não lê mentes - ele não sabe qual alteração é mais importante), como ler os marcadores de conflito e como escolher a solução correta. Mostraremos duas abordagens: resolução manual e o uso de ferramentas de merge.
- Você entenderá a natureza dos conflitos de merge e não terá mais medo deles - eles se tornarão previsíveis.
- Você será capaz de resolver conflitos manualmente, lendo corretamente os marcadores do Git.
- Você aprenderá a configurar ferramentas de merge no seu editor para resolver conflitos visualmente.
จุดเริ่มต้นของบทเรียน
Três tipos de conflitos de merge
- Conteúdo: alterações nas mesmas linhas
- Renomeação: arquivo foi modificado e renomeado
- Exclusões: arquivo foi excluído em um branch e modificado em outro
- Renomeações são os mais traiçoeiros para o Git
- Verifique o histórico do arquivo em conflitos suspeitos
Imagine que você está trabalhando em um projeto importante e de repente o Git relata um conflito. O primeiro passo para resolver é entender seu tipo. Conflitos de conteúdo ocorrem quando alterações afetam as mesmas linhas em branches diferentes. Renomeações são mais complexas: um desenvolvedor muda o nome do arquivo enquanto outro edita seu conteúdo. O terceiro tipo são as exclusões, quando um arquivo some em um branch mas continua existindo em outro. As renomeações são as que mais causam problemas, pois o Git nem sempre rastreia corretamente o histórico após a mudança de nome. Por isso, em conflitos suspeitos, sempre verifique o histórico de alterações dos arquivos.
Anatomia de um conflito complexo
- Marcadores <<<<<<< mostram suas alterações
- ======= separa suas versões das alterações de outros
- >>>>>>> marca o fim do bloco de conflito
- git status mostrará todos os arquivos problemáticos
- git diff — comparação detalhada das alterações
Suponha que você esteja fazendo merge de um branch feature para main e veja uma mensagem de conflito. Abra os arquivos problemáticos — você notará marcadores especiais. Tudo entre <<<<<<< HEAD e ======= são suas alterações. Entre ======= e >>>>>>> feature estão as alterações do branch que está sendo mesclado. Use git status para ver todos os arquivos em conflito e git diff para uma visualização detalhada das diferenças. Lembre-se: os marcadores não são erros, mas pistas de onde você precisa tomar uma decisão.
#!/bin/bash
# conflict_analysis.sh
echo "Criando um repositório de teste"
mkdir conflict-demo && cd conflict-demo
git init
echo "Criando arquivo e primeiro commit em main"
echo 'Linha 1' > file.txt
echo 'Linha 2' >> file.txt
git add . && git commit -m 'Commit inicial'
echo "Criando branch feature e alterando a primeira linha"
git checkout -b feature
sed -i 's/Linha 1/Linha 1 modificada na feature/' file.txt
git commit -am 'Modifica linha 1 na feature'
echo "Voltando para main e alterando a mesma linha"
git checkout main
sed -i 's/Linha 1/Linha 1 modificada na main/' file.txt
git commit -am 'Modifica linha 1 na main'
echo "Tentando mesclar os branches"
git merge feature || echo 'Conflito!'
echo "\nVerificando status:"
git status --short
echo "\nMostrando arquivo em conflito:"
cat file.txt
Estratégias de Resolução de Conflitos
- Edição manual: remover marcadores, manter o código desejado
- Ferramentas GUI: meld, kdiff3 para comparação visual
- --ours/--theirs: aceitar sua versão ou a versão do outro
- Em rebase, os conflitos são resolvidos para cada commit
- Após resolver — não esqueça do git add e git commit
Quando um conflito é detectado, você tem várias opções. Pode abrir o arquivo manualmente e editá-lo, removendo os marcadores e mantendo o código desejado. Para quem prefere uma abordagem visual, ferramentas como meld ou kdiff3 são excelentes — elas mostram as três versões do arquivo simultaneamente. Se você tem certeza das suas alterações, use git checkout --ours para manter sua versão, ou --theirs para aceitar a versão do outro. Tenha atenção especial durante o rebase: aqui os conflitos podem surgir em cada commit que está sendo rebaseado.
#!/bin/bash
# resolve_strategies.sh
echo "Método 1: Resolução manual"
echo 'Edite o arquivo, removendo os marcadores de conflito'
echo 'Em seguida execute: git add file.txt'
echo "\nMétodo 2: Aceitar nossa versão"
git checkout --ours file.txt
echo "\nMétodo 3: Aceitar a versão deles"
git checkout --theirs file.txt
echo "\nMétodo 4: Usar ferramenta de mesclagem"
echo 'git mergetool --tool=meld'
echo "\nApós escolher o método, finalize a mesclagem:"
echo 'git commit -m "Resolve merge conflict"'
บทเรียนฉบับเต็มใช้ได้เมื่อสมัครสมาชิก
ฉบับเต็มมีสไลด์เพิ่มอีก 34 สไลด์
วิดีโอ สไลด์ทั้งหมด โน้ต แบบทดสอบ AI ติวเตอร์ และการสัมภาษณ์จะเปิดหลังเข้าสู่ระบบและสมัครสมาชิก
เข้าสู่ระบบหรือลงทะเบียน สมัครสมาชิกเนื้อหาบทเรียน
- Três tipos de conflitos de merge
- Anatomia de um conflito complexo
- Estratégias de Resolução de Conflitos
- Prevenção e Melhores Práticas
- Como Ler Conflitos de Múltiplas Linhas no Git
- Decodificação dos Marcadores de Conflito
- Conflitos Aninhados: Estratégias de Resolução
- Automação e Ferramentas Avançadas
- Estratégia de escolha: HEAD ou branch?
- Princípio do 'menor espanto'
- Conflitos semânticos: inimigos invisíveis
- Ferramentas e Automação
- Escolhendo a Ferramenta: Quando Usar Cada Uma
- VS Code: Configuração e Recursos Avançados
- Além do Básico: cenários para conflitos complexos
- Integração no Git flow e automação
- Automatizando a mesclagem com .gitattributes
- Criando seu próprio driver de merge
- Git rerere — seu assistente pessoal
- Estratégias avançadas de automação
- Projetando workflow para equipes grandes
- Code Review como ferramenta de prevenção de conflitos
- Estratégias para trabalhar com branches de funcionalidades de longa duração
- Ferramentas e automação para resolução de conflitos
- Perigos de aceitar mudanças sem análise
- Estratégias seguras para resolução de conflitos
- Testes pós-merge: o que verificar
- Integração com CI/CD e medidas preventivas
- Como os conflitos no rebase diferem do merge
- Trabalhando com --rebase-merges
- Estratégias para resolver conflitos sequenciais
- Técnicas avançadas e debug de rebase
- CI/CD como Sistema de Controle de Qualidade
- GitHub Actions: Verificação de Conflitos
- Danger-JS: Automação Inteligente de Verificações
- Resolução Automática de Conflitos em CI/CD
- Conflitos: do Pânico à Confiança
บทความเกี่ยวกับบทเรียนนี้
- git merge: วิธีรวมบรานช์และแก้ความขัดแย้ง
- Git และ GitHub: ต่างกันอย่างไร และเชื่อมโยงกันอย่างไร
- วิธีติดตั้ง Git บน Windows, macOS และ Linux
- Git คืออะไร และนักพัฒนาต้องใช้เพื่ออะไร
- Git Bash: คืออะไร และใช้งานบน Windows อย่างไร
บทเรียนทั้งหมดในคอร์สนี้
- Introdução: Git do Zero ao Desenvolvedor Confiante
- Por que o Git é necessário — e por que ele é exigido no mercado de trabalho
- Instalação e Configuração: Preparando o Git para o Primeiro Uso
- Primeiro Repositório: init, add, commit e a Mágica do Índice
- Lendo o histórico: log, diff, show e navegação pelo passado
- Branches: A Realidade Paralela do Seu Código
- Desfazendo Erros: restore, reset, revert — O Caminho Correto e os Perigos
- GitHub e repositórios remotos: seu código na nuvem
- Trabalho em Equipe: Forks, Branches de Funcionalidades e Pull Requests
- Conflitos de Merge: Sem Pânico - Entenda e Resolva
- Processos de Git em equipes reais: qual fluxo de trabalho escolher
- Ferramentas Avançadas: rebase, stash, cherry-pick e tags
- Projeto Final: Simulando o Desenvolvimento em Equipe no Mundo Real