Merge

É possível aplicar as mudanças de uma branch à outra, num processo chamado de merge. Usa-se o comando git merge. Por exemplo, suponha que estejamos em uma branch minha-branch, e queiramos aplicar os commits de outra-branch em minha-branch:

git merge outra-branch

Um merge aplica somente os commits que as branches não têm em comum.

Conflitos

Por padrão, sempre que houver um conflito em um arquivo, o Git tenta resolver mesclando as versões dos arquivos. No entanto, nem sempre é válida essa mesclagem. Nesses casos, o Git falha em resolver o conflito, e intervenção manual é requisitada.

Em cada arquivo, o que é comum entre as duas branches é mantido. Onde há o conflito, é indicado o quê pertence à branch atual, e o que pertence à outra branch. Assim:

int main()
{
<<<<<<< HEAD
    vindo_da_minha_branch();
=======
    vindo_da_outra_branchl();
>>>>>>> outra-branch
    return 0;
}

Uma resolução de conflitos manual consiste em ir em cada um desses arquivos com conflito, e, em cada conflito, escolher uma das versões, ou até mesmo mesclá-las. Para descobrir-se quais arquivos precisam de interveção, basta executar o comando git status. Após a resolução dos conflitos, e necessário fazer um novo commit contendo os arquivos corrigidos.

Existem, no entanto, ferramentas para auxiliar na resolução dos conflitos, como o kdiff.

Exemplo

Suponha o seguinte cenário, uma branch master e uma teste:

        master    teste
HEAD -> 80ba4e4  b49a7ed
           |        |
           |     4b12d0a
           |    /
           |   /
        ec49a96
           |
        3c97506

Suponha que queiramos aplicar as os dois commits 4b12d0a e b49a7ed à branch master. Façamos o seguinte:

git merge teste

O resultado será o seguinte:

        master
HEAD -> 47d7959
           |   \
           |    \ teste
        80ba4e4  b49a7ed
           |        |
           |     4b12d0a
           |    /
           |   /
        ec49a96
           |
        3c97506

Note que a branch teste continuará existindo. Podemos fazer um novo commit nela:

master    teste
47d7959  0935946 <- HEAD
   |   \    |
   |    \   |
80ba4e4  b49a7ed
   |        |
   |     4b12d0a
   |    /
   |   /
ec49a96
   |
3c97506