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.
Phần đầu bài giảng
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"'
Bài giảng đầy đủ dành cho thuê bao
Còn 34 slide nữa trong phiên bản đầy đủ.
Video, toàn bộ slide, ghi chú, bài kiểm tra, gia sư AI và phỏng vấn sẽ mở sau khi đăng nhập và đăng ký thuê bao.
Đăng nhập hoặc đăng ký Đăng ký thuê baoNội dung bài giảng
- 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
Bài viết liên quan đến bài học này
- git merge: cách gộp nhánh và xử lý xung đột
- Git và GitHub: khác nhau thế nào và liên hệ ra sao
- Cách cài đặt Git trên Windows, macOS và Linux
- Git là gì và vì sao lập trình viên cần nó
- Git Bash: đó là gì và cách dùng trên Windows
Tất cả bài giảng của khóa học
- 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