[GIT] Merging - Aula 5

Merging

Ao realizar o merge o Git irá gerar um novo Commit com todas as alterações da Branch que está sendo mesclada, vejamos:

      B---C topic
     /
D---E---A main

Foi criado uma Branch chamada "topic", enquanto a Branch "main" seguiu normalmente, após as implementações da "topic" terem sido realizadas e testadas, é a hora de adicionar essas alterações à "main".

      B---C topic
     /     \
D---E---A---F main

Feito o Merge de "topic" na "main", foi criado o Commit "F", que contém todas as alterações dos Commits da Branch "topic" (B e C), "F" é chamado de Merge Commit.

Como fazer um Merge Commit

      B---C topic
     /
D---E---A main

Primeiramente precisamos encontrar o Merge Base ou Best Common Ancestor, no exemplo acima, o Merge Base seria o Commit "E".

Feito isso, garanta que você está na Branch que quer manter:

git switch main

No caso acima, queremos mesclar "topic" em "main"

Uma boa prática seria atualizar a sua Branch com o repositório remoto:

git pull origin main

Agora basta fazer o merge:

git merge topic

o resultado:

      B---C topic
     /     \
D---E---A---F main

Obs: Perceba que "F" o nosso Merge Commit, possui 2 parentes "A" e "C".

Fast Forward Merge

Uma forma mais rápida de fazer Merge, o Fast Forward Merge, precisa atender alguns requisitos, e sua vantagem é não criar um Merge Commit. Exemplo:

      C---D topic
     /
A---B main

Perceba que o Tip de main "B", é o Merge Base da Branch topic, o que nos permite fazer um Fast Forward Merge.

Basta realizar os passos de fazer um Merge normal (conforme explicado acima):

git merge topic

e o resultado será:

              topic
A---B---C---D main

Repare que a Branch topic continua existindo, mas todo o seu conteúdo foi adicionado à main, sem Merge Commit.

Forçando a criação de um Merge Commit

Ao chegar na situação acima, o comando Git merge irá automaticamente realizar o Fast Forward Merge, entretanto, se por alguma razão você queira criar o Merge Commit, basta fazer:

git merge --no-ff topic

--no-ff = Sem Fast Forward.