Git Merge Types
- #Git
Quando precisamos juntar duas branches temos a nossa disposição alguns comandos interessantes no git.
Esses comandos podem confundir algumas pessoas em relação ao que eles de fato produzem ao executá-los.
Neste artigo veremos as diferenças entre os diferentes comandos merge e também o comando rebase.
Para começar vamos utilizar de exemplo duas branches
1 - Main
2 - Feature/changes
Todas as branches criadas em um repositório são criadas a partir de um commit específico da branch de referência, a partir da qual foi criada.
No exemplo à baixo a branch 'Feature/changes' foi criada a partir da branch 'Main'
MERGE
O Merge normal vai pegar cada commit da branch 'Feature/changes' e adicionar ao histórico da branch main, como na figura abaixo:
main~$ git merge feature/changes
Perceba que foi gerado um commit do merge(commit 5) que indica quando o merge foi feito.
FAST FORWARD MERGE
O Fast forward merge é parecido com o Merge normal com a diferença que não cria um commit de merge
Este tipo de Merge acontece quando não houver mudanças na branch de referência, neste caso a Main, desde que criamos a nova branch.
O Fast Forward é feito automaticamente pelo git se ele identificar que não houveram novos commits na branch 'base'.
main~$ git merge feature/changes
MERGE SQUASH
O merge Squash é um comando muito interessante pois ele pega todos os commits da branch que queremos "mergear" e transforma em um único commit, esse commit é então
adicionado ao histórico de commits da branch de referência.
main~$ git merge --squash feature/changes
GIT REBASE E MERGE
O Rebase e Merge por sua vez pegará o primeiro commit da branch que foi criada em cima da branch de referência e move este commit para o ultimo
commit feito na branch de referência e depois aplica todos os outros commits em cima dessas mudanças.
feature/changes~$ git rebase main
Perceba que é parecido com o Fast Forward porém funciona quando a branch de referência sofreu alterações pelo caminho.
É sempre interessante ter a branch de referência, no nosso caso aqui a main, sempre atualizada.
Sempre procure manter as branches atualizadas com as mudanças remotas antes de executar alguma ação localmente e lembre-se sempre de ler a documentação do git para referências:
https://git-scm.com/doc.
Até a próxima.