30. Resolvendo conflitos

Metas

  • Aprender a resolver conflitos de merge

01 Fazer merge do branch master com o style

Vamos voltar para o branch style e fazer um merge dele com um novo master.

Execute:

git checkout style
git merge master

Resultado:

$ git checkout style
Switched to branch 'style'
$ git merge master
Auto-merging lib/hello.html
CONFLICT (content): Merge conflict in lib/hello.html
Automatic merge failed; fix conflicts and then commit the result.

Se você abrir o lib/hello.html você verá:

Arquivo: lib/hello.html

<!-- Author: Alexander Shvets (alex@githowto.com) -->
<html>
  <head>
<<<<<<< HEAD
    <link type="text/css" rel="stylesheet" media="all" href="style.css" />
=======
    <!-- no style -->
>>>>>>> master
  </head>
  <body>
    <h1>Hello,World! Life is great!</h1>
  </body>
</html>

A primeira seção e a versão do branch atual (style) head. A segunda seção é a versão do branch master.

02 Resolução do conflito

Você precisa resolver o conflito manualmente. Faça mudanças no lib/hello.html para alcançar o seguinte resultado.

Arquivo: lib/hello.html

<!-- Author: Alexander Shvets (alex@githowto.com) -->
<html>
  <head>
    <link type="text/css" rel="stylesheet" media="all" href="style.css" />
  </head>
  <body>
    <h1>Hello, World! Life is great!</h1>
  </body>
</html>

<

h2>03 Faça o commit de uma resolução de conflito/h2>

Execute:

git add lib/hello.html
git commit -m "Merged master fixed conflict."

Resultado:

$ git add lib/hello.html
$ git commit -m "Merged master fixed conflict."
Recorded resolution for 'lib/hello.html'.
[style 645c4e6] Merged master fixed conflict.

04 Merging avançado

Git não tem ferramentas gráficas de merging, mas aceita qualquer ferramenta de merge produzida por terceiros. (leia mais sobre essas ferramentas no StackOverflow.)