Curso
Como resolver conflitos de mesclagem no tutorial do Git
O que é um conflito de mesclagem do Git?
O sistema de controle de versão Git tem tudo a ver com o trabalho em equipe e a contribuição para projetos. Os desenvolvedores geralmente trabalham em ramificações isoladas e, quando terminam, mesclam as alterações com a ramificação principal. Esse tipo de trabalho em equipe é altamente produtivo e eficaz para encontrar bugs. Às vezes, vários desenvolvedores estão trabalhando na mesma linha de código e, quando tentam mesclar as alterações, surgem conflitos.
Exemplo simples de conflito no Git
O diagrama acima dá o exemplo perfeito de como ocorre um conflito típico de mesclagem do Git. A ramificação principal tem um arquivo que contém o texto "HELLO, WORLD!". O nome de usuário abid bifurca a ramificação principal e altera o texto para "HELLO, CAT!". Enquanto o abid está fazendo alterações, a ramificação principal original também está sendo modificada para "HELLO, DOG!". A mesclagem dessas ramificações gerará um problema de conflito de mesclagem e interromperá o processo.
A principal função do comando git merge
é combinar duas ramificações e resolver automaticamente os conflitos. No entanto, de tempos em tempos, surgem conflitos em que duas pessoas alteraram a mesma linha de código ou removeram arquivos críticos nos quais outro desenvolvedor estava trabalhando. O Git marcará essas alterações e interromperá o processo de mesclagem. Nesse caso, o conflito não foi resolvido automaticamente; em vez disso, o desenvolvedor precisa fazer alterações manualmente ou usar ferramentas para resolver o conflito.
Torne-se um engenheiro de dados
Tipos de mesclagem
O Git merge e o rebase são as duas maneiras de integrar os commits do branch de destino ao branch de origem. Além disso, a mesclagem do Git executa uma mesclagem de avanço rápido ou de não avanço rápido. Se o cabeçalho do ramo de destino existir no ramo de origem, então, por padrão, o tipo de mesclagem será uma mesclagem de avanço rápido e, se estiver faltando, será uma mesclagem sem avanço rápido. O rebase do Git é outro tipo de mesclagem que sequencia novamente o histórico de commits do branch de destino.
Fusão de avanço rápido
Por padrão, o Git Merge usa o avanço rápido para integrar os commits ausentes no branch de destino. Por exemplo, ele é usado para atualizar a ramificação local de um servidor remoto usando o comando pull. O avanço rápido não gera problemas de conflito de mesclagem, pois o Git não o aplicará se o cabeçalho do ramo de destino estiver ausente no ramo de origem.
Mesclagem sem avanço rápido
Uma mesclagem no-fast-forward também é chamada de mesclagem de três vias ou verdadeira. Ele cria um novo commit em um branch de destino integrando as alterações no branch de origem e no branch de destino. As alterações são combinadas após o último commit comum em ambas as ramificações. No nosso caso, é após o C. Esse tipo de mesclagem gerará um conflito de mesclagem do Git se o ramo de origem estiver em disputa com o ramo de destino. No diagrama acima, o commit de mesclagem (X) é criado pela integração da origem e do ramo de destino, em que K e E são as origens do commit de mesclagem.
Rebase
O rebase do Git é um pouco diferente dos outros tipos. Ele altera a sequência do histórico de commits do ramo de destino. O rebase integra o ramo de origem de forma que o ramo de destino contenha todas as alterações do ramo de origem, seguidas de todos os commits do ramo de destino após o último commit comum. No nosso caso, o último commit comum é o C, enquanto o D e o E são do ramo de origem. O commit K* é o mesmo que K com um ID de commit diferente. Em vez de vincular C, você estará vinculando E. Semelhante a uma mesclagem sem avanço rápido, se houver problemas de compatibilidade na origem e no ramo de destino, o Git levantará um problema para resolver o conflito antes de finalizar o rebase.
Tipos de conflitos de mesclagem do Git
Há dois tipos de conflitos de mesclagem do Git: no início e durante o processo de mesclagem - Atlassian. Nesta seção, aprenderemos sobre os dois tipos e as maneiras de resolver cada cenário.
No início da mesclagem
A mesclagem do Git falhará no início se houver alterações no diretório de trabalho ou na área de preparação. Ele falha no início para evitar que as alterações sejam substituídas por commits de mesclagem recebidos. Isso ocorre devido a conflitos com alterações locais, não com outras ramificações ou desenvolvedores. Para estabilizar o estado local, você pode usar comandos como git stash
, git commit
, git checkout
, ou git reset
.
Durante a mesclagem
Uma falha durante a mesclagem significa que há um conflito entre o ramo de origem e o ramo de destino em que vários desenvolvedores modificaram o mesmo arquivo. Se a mesclagem automática falhar, o Git solicitará que você resolva os problemas manualmente. Você também pode usar ferramentas de terceiros para ajudá-lo a visualizar e integrar as alterações.
Comandos para resolver conflitos de mesclagem do Git
Nesta seção, aprenderemos sobre vários comandos nativos para visualizar e resolver os conflitos de mesclagem do Git.
Comandos comuns
O status do Git é o comando usado com mais frequência para exibir o status dos arquivos modificados, a área de preparação e os commits. Durante o processo de mesclagem, ele é usado para identificar arquivos conflitantes.
git status
O registro do Git com os argumentos --merge produz a lista de commits que estão em conflito com o ramo de origem.
git log --merge
Por padrão, a opção git diff
mostrará a você a diferença entre as alterações não confirmadas e as confirmações anteriores. O Git diff é usado para comparar ramificações, commits e arquivos. Isso é útil para evitar futuros conflitos de mesclagem.
git diff
Comandos para falhas de mesclagem no início
O checkout é usado para desfazer alterações ou mudar para uma ramificação nova ou antiga.
git checkout
A redefinição do Git serve para reverter as alterações no diretório de trabalho e na área de preparação.
git reset --mixed
Comandos para conflitos durante a mesclagem
O argumento --abort
interromperá o processo de mesclagem e reverterá as alterações para o estado original antes do início da mesclagem.
git merge --abort
A redefinição do Git é normalmente usada durante o processo de mesclagem para reverter os arquivos em conflito para o estado original.
git reset
Resolver conflitos entre arquivos modificados e excluídos
O conflito do Git ocorrerá se você tiver excluído o arquivo no ramo atual e outra pessoa o tiver modificado em outro ramo. Nesse caso, você pode adicionar um arquivo e fazer o commit,
git add <filename>
ou você pode remover o arquivo e confirmar.
git rm <filename>
📌 Folha de dicas de resolução de conflitos de mesclagem do Git
Comando | Descrição | Exemplo de uso |
---|---|---|
git status |
Mostra arquivos com conflitos de mesclagem | git status |
git diff |
Exibe diferenças entre commits ou ramificações | git diff HEAD |
git log --merge |
Mostra os commits envolvidos em um conflito | git log --merge |
git merge --abort |
Cancela uma mesclagem e restaura o estado anterior | git merge --abort |
git reset --hard HEAD |
Redefine a ramificação para o último estado confirmado | git reset --hard HEAD |
git checkout -- <filename> |
Descarta alterações em um arquivo específico | git checkout -- README.md |
git mergetool |
Abre a ferramenta de mesclagem configurada para resolução de conflitos | git mergetool |
git add <filename> |
Marca um conflito como resolvido após a edição | git add README.md |
git commit -m "<message>" |
Salva as alterações resolvidas após um conflito de mesclagem | git commit -m "Resolved merge conflict" |
git rebase --continue |
Continua um rebase interrompido após a resolução de conflitos | git rebase --continue |
git rm <filename> |
Remove um arquivo que foi excluído em uma ramificação e modificado em outra | git rm README.md |
git push |
Empurra as alterações após a resolução de conflitos de mesclagem | git push origin main |
Ferramentas de mesclagem visual
As ferramentas de mesclagem são ferramentas visuais fáceis de usar para identificar e resolver todos os tipos de conflitos de mesclagem. Algumas das ferramentas oferecem suporte a recursos adicionais, como comparação de alterações, operações do Git e gerenciamento de projetos e repositórios. Há dois tipos de ferramentas de mesclagem do Git: somente terminal e baseadas em GUI. As ferramentas baseadas em terminal são abertas no PowerShell ou no Bash e as ferramentas baseadas em GUI são abertas em um ambiente com janelas.
Para verificar a lista de ferramentas instaladas e válidas, use:
git mergetool --tool-help
A lista consiste em todas as ferramentas válidas que podem ser instaladas e integradas aos comandos git.
Por exemplo, temos o vim e o nvim instalados por padrão e, se você quiser ver a diferença entre um arquivo sem commit e um commit anterior, digite:
git difftool --tool=vimdiff3
A ferramenta vimdiff3 destaca as alterações e permite que você compare os commits no terminal.
Diferença entre duas versões do mesmo arquivo no vimdiff3
Fusão
O Meld é uma ferramenta gratuita e de código aberto que leva a resolução de conflitos de mesclagem a outro nível. Para integrá-lo ao Git, você precisa primeiro fazer o download e instalar a configuração do site oficial. Em seguida, adicione-o à configuração global para que, por padrão, o Git inicie o Meld para resolver conflitos.
Os comandos de configuração abaixo são aplicáveis apenas a usuários do Windows. A única alteração que você precisa fazer é mudar o caminho do arquivo instalado do Meld para Mac ou Linux.
git config --global merge.tool meld
git config --global mergetool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"
git config --global diff.tool meld
git config --global difftool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"
Depois de configurar os padrões, você pode digitar git difftool
no diretório local do Git para iniciar a versão do Meld para Windows, ou você pode git mergetool
para resolver conflitos de mesclagem, conforme mostrado abaixo.
Resolução de um conflito de mesclagem com o Meld
VSCode
O VSCode oferece a melhor e mais popular maneira de resolver o conflito de mesclagem. Quando o Git não conseguir mesclar arquivos automaticamente, o VSCode destacará o código em conflito e dará a você quatro opções: aceitar alterações atuais, aceitar alterações recebidas, aceitar ambas as alterações e comparar alterações. Você pode usar essas opções para limpar seu arquivo e resolver todos os problemas pendentes.
Resolução de um conflito de mesclagem com o VSCode
Se você estiver procurando uma solução completa para suas operações Git, experimente o GitKraken. Ele vem com um cliente gratuito, extensão VSCode, e fornece uma ferramenta integrada para resolver conflitos de mesclagem.
Como resolver um conflito de mesclagem do Git
Nesta seção, aprenderemos a criar um conflito de mesclagem do Git e a resolvê-lo. O tutorial é dividido em duas partes. Na primeira parte, aprenderemos a resolver conflitos do Git localmente; a segunda parte trata da resolução de conflitos com um servidor remoto (GitHub).
Conflito de mesclagem local
A criação de conflitos de mesclagem nos ajudará a aprender como esses problemas surgem em primeiro lugar. Assim, podemos usar formas criativas para resolver esses problemas ou até mesmo evitar que eles ocorram no futuro.
Agora, criaremos um repositório Git com um único arquivo e criaremos nosso primeiro commit para você começar.
- Crie uma pasta chamada datacamp.
- Altere o diretório para DataCamp.
- Inicializar o Git.
- Crie um arquivo
README.md
com o título fornecido. - Faça o stage e confirme as alterações em um arquivo.
mkdir datacamp
cd datacamp
git init
echo "# How to Resolve Git Merge Conflict" > README.md
git add README.md
git commit -m "first commit"
>>> [main (root-commit) 8199ea2] first commit
>>> 1 file changed, 1 insertion(+)
>>> create mode 100644 README.md
Em seguida, criaremos um novo readme de ramificação e alteraremos o título de "...Git Merge..." para "...Git...". Adicione o arquivo e crie o commit usando o argumento -am
.
git checkout -b readme
echo "# How to Resolve Git Conflict" > README.md
git commit -am "new branch conflict added"
>>> [readme 155f694] new branch conflict added
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
Volte para a ramificação principal e adicione uma nova linha ao arquivo README.md
usando >>
. Ao salvar as alterações e criar commits, conseguimos criar um conflito entre duas versões do mesmo arquivo.
git checkout main
echo "New change in base branch" >> README.md
git commit -am " a line added to base branch Readme file"
>>> [main f1f1874] a line added to base branch Readme file
>>> 1 file changed, 1 insertion(+)
Como podemos ver, ao mesclar o ramo leia-me, o Git exibiu uma mensagem dizendo que a mesclagem automática falhou e que precisamos fazer alterações manualmente e, em seguida, confirmar o resultado.
git merge readme
>>> Auto-merging README.md
>>> CONFLICT (content): Merge conflict in README.md
>>> Automatic merge failed; fix conflicts and then commit the result.
Resolveremos o problema manualmente abrindo e editando o arquivo no Bloco de Notas. A imagem abaixo mostra a seta com HEAD, um divisor e uma seta de direção diferente com um readme. A parte HEAD mostra as alterações existentes na ramificação principal, e a parte readme é a ramificação que queremos mesclar, que consiste em um título diferente.
Resolução manual de um conflito de mesclagem
Para resolver o problema, removeremos a parte do ramo leia-me, as setas e o divisor. A versão final do arquivo deve ter uma aparência limpa, como mostrado abaixo.
Conflito resolvido
Depois que adicionarmos o arquivo e criarmos um commit, o conflito de mesclagem será resolvido. É a maneira mais comum e mais simples de resolver problemas. Você também pode usar um ambiente de desenvolvimento integrado (IDE) para resolver problemas mais rapidamente.
git commit -am "conflict resolved in file README.md"
>>> [main 9994a29] conflict resolved in file README.md
Conflito de mesclagem remota
Para criar e resolver conflitos de mesclagem remota, precisamos criar um novo repositório no GitHub.
Criando um novo repositório no GitHub
Em seguida, adicione o nome remoto (origem) com o endereço ao repositório e envie todas as alterações de um repositório local para a ramificação principal remota usando o upstream.
git remote add origin https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
git push --set-upstream origin main
>>> Enumerating objects: 12, done.
>>> Counting objects: 100% (12/12), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (6/6), done.
>>> Writing objects: 100% (12/12), 998 bytes | 499.00 KiB/s, done.
>>> Total 12 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), done.
>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>> * [new branch] main -> main
>>> branch 'main' set up to track 'origin/main'.
Para criar um conflito, precisamos fazer alterações no arquivo README.md
remoto e local. Você pode usar o editor de arquivos do GitHub para alterar "...Git merge..." para "...Sit-Merge..." e, em seguida, fazer o commit das alterações.
Fazendo alterações no editor do GitHub
Em seguida, no repositório local, altere o arquivo README.md
para adicionar apenas um título simples e confirme as alterações.
echo "# How to Resolve Merge Conflicts in Git Tutorial" > README.md
git commit -am "local branch changes in README.md"
>>> [main c677a13] local branch changes in README.md
>>> 1 file changed, 1 insertion(+), 4 deletions(-)
Por fim, envie as alterações para o servidor remoto. Observe que o Git apresentou o erro com dicas sobre como eliminar o problema.
git push
>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>> ! [rejected] main -> main (fetch first)
>>> error: failed to push some refs to 'https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git'
>>> hint: Updates were rejected because the remote contains work that you do
>>> hint: not have locally. This is usually caused by another repository pushing
>>> hint: to the same ref. You may want to first integrate the remote changes
>>> hint: (e.g., 'git pull ...') before pushing again.
>>> hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Seguiremos a dica mais simples, que é extrair o arquivo do servidor remoto antes de enviar.
A extração do arquivo falhou devido a um conflito de mesclagem no arquivo README.md
. Poderíamos corrigi-lo manualmente usando o Bloco de Notas, mas desta vez usaremos uma ferramenta visual para nos ajudar nesse processo.
git pull
>>> remote: Enumerating objects: 5, done.
>>> remote: Counting objects: 100% (5/5), done.
>>> remote: Compressing objects: 100% (2/2), done.
>>> remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
>>> Unpacking objects: 100% (3/3), 681 bytes | 75.00 KiB/s, done.
>>> From https://github.com/kingabzpro/DataCamp-Git-Merge-Guide
>>> aaf149d..49b7d14 main -> origin/main
>>> Auto-merging README.md
>>> CONFLICT (content): Merge conflict in README.md
>>> Automatic merge failed; fix conflicts and then commit the result.
A ferramenta de mesclagem Meld identificará os arquivos conflitantes e os mostrará no aplicativo Meld GUI.
git mergetool
>>> Merging:
>>> README.md
>>> Normal merge conflict for 'README.md':
>>> {local}: modified file
>>> {remote}: modified file
Há três colunas: README_LOCAL_473.md
, README.md
, e README_LOCAL_473.md
. Se você achar que as alterações remotas são válidas, clique na seta preta na coluna remota; e se quiser que as alterações locais persistam, clique na seta preta na coluna local. É simples assim.
Conflito resolvido usando a ferramenta de mesclagem Meld
Depois de fazer as alterações, salve o arquivo e faça o commit. Como você pode ver, o envio de um arquivo para um servidor remoto não gera um erro de conflito de mesclagem.
git commit -am "remote main branch conflict resolved"
git push
>>> Enumerating objects: 16, done.
>>> Counting objects: 100% (16/16), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (6/6), done.
>>> Writing objects: 100% (10/10), 1.08 KiB | 550.00 KiB/s, done.
>>> Total 10 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), completed with 1 local object.
>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>> 49b7d14..8f5c3aa main -> main
Resolvemos com sucesso os conflitos de mesclagem locais e remotos. Esses conflitos são tratados diariamente por cientistas de dados e engenheiros de machine learning. Para aprimorar suas habilidades nas operações do Git, faça um curso de Introdução ao Git.
Conclusão
A resolução de conflitos de mesclagem do Git é uma tarefa complexa e altamente arriscada, pois você pode quebrar o software mesclando códigos defeituosos. As ferramentas de mesclagem oferecem um ambiente fácil de usar com uma maneira mais segura de detectar e resolver conflitos de mesclagem. Neste tutorial, você aprendeu por que ocorrem conflitos no Git e como resolvê-los. Também abordamos vários tipos de mesclagem e conflito, comandos úteis do Git e ferramentas visuais. Na seção final, criamos um conflito de mesclagem e o resolvemos em um repositório local e remoto.
Se você é novo no Git e quer saber como ele funciona, leia: Tutorial de introdução ao Git e ao GitHub.
Obtenha a certificação para a função de engenheiro de dados dos seus sonhos
Nossos programas de certificação ajudam você a se destacar e a provar que suas habilidades estão prontas para o trabalho para possíveis empregadores.


Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.
Perguntas frequentes
Quais são as práticas recomendadas para evitar conflitos de mesclagem do Git?
Para reduzir o risco de conflitos:
- Sempre obtenha as alterações mais recentes (
git pull origin main
) antes de iniciar um novo trabalho. - Comunique-se com sua equipe para evitar trabalhar nas mesmas linhas de código.
- Faça commits pequenos e frequentes em vez de commits grandes e complexos.
- Use ramificações de recursos em vez de fazer o commit diretamente em
main
. - Execute o site
git diff
antes de fazer a fusão para detectar possíveis conflitos com antecedência.
Posso resolver conflitos de mesclagem sem um terminal?
Sim! Muitas ferramentas Git baseadas em GUI facilitam a resolução de conflitos:
- Código VS: Destaca conflitos com as opções "Accept Incoming" (Aceitar entrada) e "Accept Current" (Aceitar atual).
- GitKraken: Oferece uma interface visual para a resolução de conflitos de forma interativa.
- Meld / Beyond Compare: Ferramentas de mesclagem que ajudam a comparar e resolver diferenças visualmente. Execute
git mergetool
para usar uma ferramenta visual configurada.
Por que continuo recebendo conflitos de mesclagem mesmo depois de resolvê-los?
Os possíveis motivos incluem:
- Você se esqueceu de preparar (
git add
) e confirmar (git commit -m "Resolved conflict"
) os arquivos resolvidos. - Outro colega de equipe fez novas alterações conflitantes depois que você resolveu as suas. Experimente
git pull --rebase
. - Você não enviou suas alterações resolvidas antes de mesclá-las novamente. Sempre execute o site
git push
depois de resolver os conflitos.
O que devo fazer se eu acidentalmente abortar uma mesclagem (git merge --abort)?
Se você abortou uma mesclagem, mas deseja tentar novamente, é possível:
- Basta executar novamente o comando de mesclagem (
git merge
). - Use
git reflog
para verificar o estado anterior antes do aborto e restaurá-lo, se necessário.
Como faço para desfazer um erro ao resolver um conflito de mesclagem?
Se você cometeu um erro na resolução de conflitos:
- Execute
git reset --hard HEAD
para descartar todas as alterações e reiniciar. - Use
git checkout --
para reverter arquivos específicos ao seu estado original. - Se você já confirmou o erro, use
git revert
para criar um novo commit desfazendo as alterações.
Como faço para resolver um conflito de mesclagem em arquivos binários?
O Git não pode mesclar automaticamente arquivos binários (por exemplo, imagens, PDFs). Para resolver:
- Escolha manualmente qual versão você deseja manter e substitua o arquivo.
- Use
git checkout --theirs
ougit checkout --ours
para manter uma versão. - Confirme o arquivo resolvido (
git add && git commit -m "Resolved binary file conflict"
).
Qual é a diferença entre git merge --abort e git reset --merge?
git merge --abort
: Desfaz com segurança uma mesclagem e restaura o ramo ao seu estado anterior antes da mesclagem.git reset --merge
: Semelhante, mas retém arquivos preparados e pode ser mais útil se você quiser manter determinadas alterações.
Como faço para resolver um conflito de mesclagem ao fazer push para o GitHub?
Se o site git push
falhar com um erro de conflito de mesclagem, tente o seguinte:
- Extraia as alterações mais recentes:
git pull origin main --rebase
- Resolva manualmente os conflitos em sua filial local.
- Prepare e confirme os arquivos resolvidos:
git add
git commit -m "Resolved merge conflict"
- Empurre novamente:
git push origin main
O que é um conflito de rebase e como posso corrigi-lo?
Um conflito de rebase ocorre quando você executa git rebase
e as alterações não podem ser aplicadas de forma limpa. Para corrigir:
- Resolva os conflitos manualmente e, em seguida, execute
git rebase --continue
. - Se você quiser cancelar o rebase, use
git rebase --abort
. - Use
git rebase --skip
se você quiser ignorar o commit conflitante.
Posso mesclar ramificações sem conflitos usando as configurações do Git?
O Git tem uma estratégia de mesclagem automática que às vezes ajuda:
- Use
git merge -X theirs
para sempre aceitar as alterações do outro ramo. - Use
git merge -X ours
para manter sempre as alterações de sua filial. No entanto, isso não é infalível e deve ser usado com cuidado.
Saiba mais sobre o Git com estes cursos!
Curso
Intermediate Git
Curso
Introduction to GitHub Concepts

blog
O que é Git? Manual completo do Git

Summer Worsley
14 min
Tutorial
Tutorial do GitHub e do Git para iniciantes
Tutorial
Git Rename Branch: Como renomear uma filial local ou remota
Tutorial
Tutorial de push e pull do GIT
Olivia Smith
13 min
Tutorial
Git Pull Force: Como substituir uma ramificação local por uma remota
Tutorial