Entendendo os Marcadores de Conflito
Quando o Git não consegue juntar (fazer o “merge”) as alterações de dois branches automaticamente, ele modifica o arquivo problemático e insere esses marcadores para mostrar exatamente onde está o conflito. Veja o que cada parte significa:
<<<<<<< HEAD
[Conteúdo do seu branch atual/main - ou seja, SUAS alterações]
=======
[Conteúdo do branch que está tentando mesclar - ou seja, as alterações que estão VINDO DE FORA]
>>>>>>> [nome-do-outro-branch ou hash do commit]
<<<<<<< HEAD
: Marca o início do bloco de código que está no seu branch atual (o branch para o qual você está tentando trazer as alterações, muitas vezes chamado deHEAD
). Pense nisso como “sua versão” ou “a versão que já estava aqui”.=======
: Separa as duas versões conflitantes. É a linha divisória.>>>>>>> [nome-do-outro-branch ou hash do commit]
: Marca o fim do bloco de código que está vindo do outro branch (o branch que você está tentando mesclar no seu branch atual). Pense nisso como “a versão do colega” ou “a versão que está chegando”. A informação depois de>>>>>>>
te diz de onde vêm essas alterações.
Como Resolver o Conflito: Passo a Passo
- Abra o Arquivo Conflitante:
- O Git (ou o GitHub Desktop) geralmente informa quais arquivos estão com conflito.
- Abra esse arquivo no seu editor de texto ou IDE preferido (VS Code, Notepad++, Sublime Text, etc.). Você verá os marcadores
<<<<<<<
,=======
, e>>>>>>>
no local do conflito.
- Analise as Diferenças:
- Leia com atenção o código entre
<<<<<<< HEAD
e=======
. Esta é a “sua” versão. - Leia com atenção o código entre
=======
e>>>>>>> ...
. Esta é a versão “do outro branch”. - Tente entender por que essas seções são diferentes e qual era a intenção de cada alteração.
- Leia com atenção o código entre
- Decida o que Manter (A Parte Crucial!): Aqui é onde você e sua equipe (se necessário) precisam tomar uma decisão. Você tem algumas opções:
- a) Manter APENAS a SUA versão (do
HEAD
):- Se você decidir que as alterações do seu branch atual são as corretas e as que vêm do outro branch devem ser descartadas para esta seção específica.
- Como fazer: Apague a linha
=======
, todo o conteúdo entre=======
e>>>>>>> ...
, e a própria linha>>>>>>> ...
. Mantenha apenas o conteúdo que estava entre<<<<<<< HEAD
e=======
, e apague também a linha<<<<<<< HEAD
.
- b) Manter APENAS a versão DO OUTRO BRANCH:
- Se você decidir que as alterações que estão vindo do outro branch são as corretas e as do seu branch atual devem ser descartadas para esta seção.
- Como fazer: Apague a linha
<<<<<<< HEAD
, todo o conteúdo entre<<<<<<< HEAD
e=======
, e a própria linha=======
. Mantenha apenas o conteúdo que estava entre=======
e>>>>>>> ...
, e apague também a linha>>>>>>> ...
.
- c) Combinar AMBAS as versões (ou partes delas):
- Muitas vezes, ambas as versões têm contribuições válidas, ou você precisa de um pouco de cada uma.
- Como fazer: Edite o texto manualmente. Você pode pegar linhas de uma versão, linhas da outra, ou até mesmo reescrever a seção para que faça sentido com ambas as contribuições. O importante é que, ao final, você apague TODAS as linhas de marcadores (
<<<<<<< HEAD
,=======
,>>>>>>> ...
) e deixe apenas o código final que você deseja que permaneça no arquivo.
- d) Escrever algo COMPLETAMENTE NOVO:
- Às vezes, ao ver o conflito, você percebe que nenhuma das duas versões é ideal e a melhor solução é escrever algo diferente que resolva a intenção de ambas as mudanças.
- Como fazer: Apague todos os marcadores e o conteúdo conflitante entre eles, e escreva o novo código no lugar.
- a) Manter APENAS a SUA versão (do
- Remova TODOS os Marcadores de Conflito:
- Este é um passo CRÍTICO. O arquivo só será considerado “resolvido” pelo Git quando todas as linhas
<<<<<<< HEAD
,=======
, e>>>>>>> ...
forem removidas. - O que deve sobrar no arquivo é apenas o código final que você decidiu que é o correto para aquela seção.
- Este é um passo CRÍTICO. O arquivo só será considerado “resolvido” pelo Git quando todas as linhas
- Salve o Arquivo:
- Após fazer as edições e remover os marcadores, salve o arquivo.
- Adicione o Arquivo Resolvido ao “Stage” (Área de Preparação):
- Volte para o terminal Git ou para o GitHub Desktop.
- Você precisa informar ao Git que resolveu o conflito naquele arquivo.
- No terminal Git:
git add [nome-do-arquivo-resolvido.ext]
- No GitHub Desktop: O arquivo geralmente muda de um estado de “conflito” para “modificado”. Você pode selecioná-lo (colocar um “check”) para adicioná-lo ao próximo commit.
- No terminal Git:
- Faça o Commit da Resolução do Conflito:
- Agora que o conflito está resolvido e o arquivo está no “stage”, você precisa fazer um commit para finalizar o processo de merge (ou rebase, dependendo da operação que causou o conflito).
- No terminal Git:
git commit
(o Git geralmente sugere uma mensagem de commit padrão para merges, como “Merge branch ‘nome-do-outro-branch'”, que você pode usar ou editar). - No GitHub Desktop: Clique no botão “Commit” (a mensagem de commit também pode ser pré-preenchida).
- No terminal Git:
- Agora que o conflito está resolvido e o arquivo está no “stage”, você precisa fazer um commit para finalizar o processo de merge (ou rebase, dependendo da operação que causou o conflito).
Exemplo Prático:
Imagine que o arquivo README.md
está assim após um conflito:
<<<<<<< HEAD
## Funcionalidades Principais do Projeto
- Login de Usuário
- Cadastro de Produtos
- Geração de Relatórios Avançados
=======
## Funcionalidades do Projeto
- Login de Usuário
- Cadastro de Itens
- Geração de Gráficos Simples
>>>>>>> feature/novas-funcionalidades
Decisão: Queremos manter “Funcionalidades Principais do Projeto”, “Login de Usuário”, “Cadastro de Produtos” (do HEAD) e “Geração de Gráficos Simples” (da feature/novas-funcionalidades
), mas descartar “Geração de Relatórios Avançados” e “Cadastro de Itens”.
Como ficaria após a edição manual (antes de salvar):
## Funcionalidades Principais do Projeto
- Login de Usuário
- Cadastro de Produtos
- Geração de Gráficos Simples
O que foi feito:
- A linha
<<<<<<< HEAD
foi apagada. - A linha
=======
foi apagada. - A linha
>>>>>>> feature/novas-funcionalidades
foi apagada. - O conteúdo foi editado para refletir a decisão.
Dicas Importantes:
- Comunique-se com sua equipe! Se você não tem certeza de qual versão manter ou como combinar as alterações, converse com o colega que fez as outras modificações.
- Teste após resolver! Especialmente se for código, certifique-se de que o projeto ainda funciona como esperado após resolver os conflitos.
- Use um bom editor de texto: Editores com destaque de sintaxe podem ajudar a visualizar melhor as diferenças. Alguns editores e IDEs (como o VS Code) têm ferramentas integradas para ajudar na resolução de conflitos, mostrando as versões lado a lado e permitindo que você escolha qual manter com cliques.
- Não entre em pânico! Todo desenvolvedor passa por isso. Com a prática, fica mais fácil.
Ao seguir esses passos, você conseguirá resolver os conflitos e continuar com seu trabalho colaborativo!
Share this content:
Publicar comentário