Đoạn xem trước bài giảng

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.

conflito de merge marcadores de conflito resolução de conflitos
Bạn sẽ học gì trong bài giảng này
  • 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ê bao

Nội dung bài giảng

  1. Três tipos de conflitos de merge
  2. Anatomia de um conflito complexo
  3. Estratégias de Resolução de Conflitos
  4. Prevenção e Melhores Práticas
  5. Como Ler Conflitos de Múltiplas Linhas no Git
  6. Decodificação dos Marcadores de Conflito
  7. Conflitos Aninhados: Estratégias de Resolução
  8. Automação e Ferramentas Avançadas
  9. Estratégia de escolha: HEAD ou branch?
  10. Princípio do 'menor espanto'
  11. Conflitos semânticos: inimigos invisíveis
  12. Ferramentas e Automação
  13. Escolhendo a Ferramenta: Quando Usar Cada Uma
  14. VS Code: Configuração e Recursos Avançados
  15. Além do Básico: cenários para conflitos complexos
  16. Integração no Git flow e automação
  17. Automatizando a mesclagem com .gitattributes
  18. Criando seu próprio driver de merge
  19. Git rerere — seu assistente pessoal
  20. Estratégias avançadas de automação
  21. Projetando workflow para equipes grandes
  22. Code Review como ferramenta de prevenção de conflitos
  23. Estratégias para trabalhar com branches de funcionalidades de longa duração
  24. Ferramentas e automação para resolução de conflitos
  25. Perigos de aceitar mudanças sem análise
  26. Estratégias seguras para resolução de conflitos
  27. Testes pós-merge: o que verificar
  28. Integração com CI/CD e medidas preventivas
  29. Como os conflitos no rebase diferem do merge
  30. Trabalhando com --rebase-merges
  31. Estratégias para resolver conflitos sequenciais
  32. Técnicas avançadas e debug de rebase
  33. CI/CD como Sistema de Controle de Qualidade
  34. GitHub Actions: Verificação de Conflitos
  35. Danger-JS: Automação Inteligente de Verificações
  36. Resolução Automática de Conflitos em CI/CD
  37. Conflitos: do Pânico à Confiança

Bài viết liên quan đến bài học này

Tất cả bài giảng của khóa học

  1. Introdução: Git do Zero ao Desenvolvedor Confiante
  2. Por que o Git é necessário — e por que ele é exigido no mercado de trabalho
  3. Instalação e Configuração: Preparando o Git para o Primeiro Uso
  4. Primeiro Repositório: init, add, commit e a Mágica do Índice
  5. Lendo o histórico: log, diff, show e navegação pelo passado
  6. Branches: A Realidade Paralela do Seu Código
  7. Desfazendo Erros: restore, reset, revert — O Caminho Correto e os Perigos
  8. GitHub e repositórios remotos: seu código na nuvem
  9. Trabalho em Equipe: Forks, Branches de Funcionalidades e Pull Requests
  10. Conflitos de Merge: Sem Pânico - Entenda e Resolva
  11. Processos de Git em equipes reais: qual fluxo de trabalho escolher
  12. Ferramentas Avançadas: rebase, stash, cherry-pick e tags
  13. Projeto Final: Simulando o Desenvolvimento em Equipe no Mundo Real