Resolver um conflito de merge usando a linha de comando
Você pode resolver conflitos de merge usando a linha de comando e um editor de texto.
Neste artigo
- Conflitos de merge de alterações diferentes na linha
- Conflitos de merge de arquivo removido
- Leia mais
Os conflitos de merge ocorrem quando alterações concorrentes são feitas na mesma linha de um arquivo ou quando uma pessoa edita um arquivo e outra pessoa exclui o mesmo arquivo. Para obter mais informações, consulte "Sobre conflitos de merge".
Dica: você pode usar o editor de conflitos no GitHub Enterprise para resolver conflitos de merge de alterações diferentes na linha entre branches que fazem parte de uma pull request. Para obter mais informações, consulte "Revolver um conflito de merge no GitHub".
Conflitos de merge de alterações diferentes na linha
Para resolver um conflito de merge causado por alterações diferentes na linha, você deve escolher quais alterações dos diferentes branches incorporar em um novo commit.
Por exemplo, se você e outra pessoa editarem as mesmas linhas do arquivo styleguide.md em branches diferentes do mesmo repositório Git, você receberá um erro de conflito de merge quando tentar fazer merge desses branches. Você deve resolver esse conflito de merge com um novo commit antes de fazer merge desses branches.
-
Open TerminalTerminalGit Bash.
-
Navegue até o repositório Git local que tem o conflito de merge.
cd REPOSITORY-NAME
-
Gere uma lista dos arquivos afetados pelo conflito de merge. Neste exemplo, o arquivo styleguide.md tem um conflito de merge.
$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add
..." to mark resolution) > # > # both modified: styleguide.md > # > no changes added to commit (use "git add" and/or "git commit -a") -
Abra o editor de texto de sua preferência, como o Atom, e navegue até o arquivo que tem conflitos de merge.
-
Para ver o começo do conflito de merge no arquivo, pesquise o marcador de conflito
<<<<<<<
no arquivo. Quando abrir o arquivo no editor de texto, você verá as alterações do branch HEAD ou base após a linha<<<<<<< HEAD
. Em seguida, você verá=======
, que divide suas alterações das alterações no outro branch, seguido por>>>>>>> BRANCH-NAME
. Neste exemplo, uma pessoa escreveu "open an issue" (abrir um problema) no branch base ou HEAD e outra pessoa escreveu "ask your question in IRC" (faça sua pergunta no IRC) no branch de comparação oubranch-a
.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Decide if you want to keep only your branch's changes, keep only the other branch's changes, or make a brand new change, which may incorporate changes from both branches. Delete the conflict markers
<<<<<<<
,=======
,>>>>>>>
and make the changes you want in the final merge. Neste exemplo, as duas alterações são incorporadas ao merge final:If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
-
Adicione ou faça stage das alterações.
$ git add .
-
Faça o commit das suas alterações com um comentário.
$ git commit -m "Resolved merge conflict by incorporating both suggestions."
Agora você pode fazer merge dos branches na linha de comando ou fazer push das alterações para o repositório remoto no GitHub Enterprise e fazer merge das alterações em uma pull request.
Conflitos de merge de arquivo removido
Para resolver um conflito de merge causado por alterações concorrentes em um arquivo, quando uma pessoa exclui um arquivo em um branch e outra pessoa edita o mesmo arquivo, você deve escolher se deseja excluir ou manter o arquivo removido em um novo commit.
Por exemplo, se você editou um arquivo, como o README.md, e outra pessoa removeu o mesmo arquivo em outro branch no mesmo repositório Git, você receberá um erro de conflito de merge quando tentar fazer merge desses branches. Você deve resolver esse conflito de merge com um novo commit antes de fazer merge desses branches.
-
Open TerminalTerminalGit Bash.
-
Navegue até o repositório Git local que tem o conflito de merge.
cd REPOSITORY-NAME
-
Gere uma lista dos arquivos afetados pelo conflito de merge. Neste exemplo, o arquivo README.md tem um conflito de merge.
$ git status > # On branch master > # Your branch and 'origin/master' have diverged, > # and have 1 and 2 different commits each, respectively. > # (use "git pull" to merge the remote branch into yours) > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add/rm
..." as appropriate to mark resolution) > # > # deleted by us: README.md > # > # no changes added to commit (use "git add" and/or "git commit -a") -
Abra o editor de texto de sua preferência, como o Atom, e navegue até o arquivo que tem conflitos de merge.
-
Decida se você deseja manter o arquivo removido. Você pode ver as alterações mais recentes feitas no arquivo removido no editor de texto.
Para adicionar o arquivo removido de volta ao repositório:
$ git add README.md
Para remover o arquivo do seu repositório:
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
Faça o commit das suas alterações com um comentário.
$ git commit -m "Resolved merge conflict by keeping README.md file." > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Agora você pode fazer merge dos branches na linha de comando ou fazer push das alterações para o repositório remoto no GitHub Enterprise e fazer merge das alterações em uma pull request.