Git | Merge

Lilian Lima
Devs JavaGirl
Published in
3 min readJun 22, 2019

Essa é a quarta publicação de uma série onde compartilho como as coisas acontecem nos bastidores do Git, além de comandos, conceitos.

O merge no Git é feito a partir da definição da branch que desejo mesclar na branch que estou, por exemplo, suponha que eu esteja na branch master e queira integrar o conteúdo da branch minha-feature nela, para tanto é necessário executar: git merge minha-feature<aqui-vai-o-nome-da-branch-que-deseja-mesclar>.

Se o conteúdo que desejo integrar não conflitar com o conteúdo da branch que estou, no caso com a branch master, o merge ocorrerá sem problemas e chamamos isso de fast-forward merge.

Para facilitar o entendimento vejam os diagramas representando o estado das branches antes e depois do merge.

Antes:

Depois:

Agora tanto a branch minha-feature quanto a master apontam para o mesmo commit. O commit com o código 2636536 foi inserido no topo da pilha de commits da branch master.

Vamos nos aproximar da realidade de um trabalho em equipe e complicar um pouco mais. Suponha outra vez que eu tenha realizado uma alteração no arquivo application.properties e o tenha commitado na branch minha-feature e minha colega Maria também tenha feito uma alteração, mas num outro arquivo qualquer e o tenha commitado na branch master, quando o merge for executado o Git não conseguirá realizar o fast-forward, pois apesar de possuírem um commit ancestral comum cada uma das branches agora possui um commit adicional:

Então o Git abrirá uma janela do seu editor favorito para que você escreva algo sobre a resolução de conflitos e por debaixo dos panos ele gerará um novo objeto de commit considerando como antecessores/pais o commit que estiver no topo da pilha de commits da branch master, 4e56341, e o commit f896543 realizado na branch minha-feature:

Vamos subir ainda mais o tom e deixar o cenário mais complicado, suponha que eu e a Maria façamos alterações na primeira linha do mesmo arquivo application.properties, porém em branches distintas, eu na minha-feature e ela na master, imaginem o que irá ocorrer quando realizarmos o merge? Pá!

O Git irá delegar pra você a responsabilidade de qual alteração considerar, a minha ou a da Maria. (Para deixar a vida mais fácil use sua IDE para resolver o conflito). No arquivo conflitante teremos algo semelhante a isso:

Uma vez selecionada a linha desejada e eliminada as demais que foram adicionadas pelo Git para sinalização do conflito, seguimos com o workflow local normal, isto é, adicionamos o arquivo para a Staging Area e depois fazemos o commit para o Repositório Local.

Caso não queira prosseguir com o merge, você pode simplesmente abortar isto executando git merge — abort.

Referência: https://dev.to/unseenwizzard/learn-git-concepts-not-commands-4gjc

--

--

Lilian Lima
Devs JavaGirl

{“ocupação”: “software engineer”, “idioma computacional”: “java”, “um hobby”:” escrever”,” um valor”:” justiça social”, “um amor”: “minha família 💙”}