
Git Merge
- Operação:
git merge develop
- Objetivo: integrar as modificações de uma branch (
develop) noutra (feature/login).
- Processo: o Git cria um novo « commit de fusão » que tem dois pais, um para o último commit de cada branch. Isto preserva o histórico tal como ocorreu.
- Resultado: o histórico da branch
feature/login mostra uma estrutura com uma bifurcação, onde o commit de fusão combina os históricos das duas branches.
Git Rebase
- Operação:
git rebase develop
- Objetivo: aplicar de novo os commits no cimo de outra branch de base.
- Processo: rebasar toma as modificações feitas na branch
feature/login e reaplica-as no cimo da branch develop.
- Resultado: isto torna o histórico linear, como se as modificações tivessem sido feitas logo a seguir às últimas modificações em
develop.
Diferenças-chave
- Preservação do histórico: o merge não modifica o histórico existente, enquanto o rebase reescreve o histórico dos commits para o tornar linear.
- Resolução de conflitos: com merge, os conflitos resolvem-se no fim do processo de fusão; o rebase pode exigir resolver conflitos ao longo do processo, à medida que cada commit é reaplicado.
Em resumo, merge usa-se para conservar um histórico preciso das alterações, enquanto rebase é preferido para simplificar o histórico antes da integração de uma branch de funcionalidades.
2 - Ainda não está claro?
Git Merge
- O que faz: funde as alterações de duas branches numa só. Combina os caminhos de desenvolvimento.
- Como funciona: cria um novo commit que tem dois pais. Cada pai representa o último commit de cada branch antes da fusão.
- Histórico dos commits: o histórico mostra claramente quando as branches divergiram e se fundiram. Parece um gráfico com um ponto em que duas linhas se juntam para formar uma só.
Git Rebase
- O que faz: muda a base da sua branch de funcionalidades para que apareça como se tivesse sido criada a partir do último commit da branch
develop.
- Como funciona: toma os commits da branch de funcionalidades e « reproduz-nos » um a um no cimo da branch
develop.
- Histórico dos commits: o histórico torna-se linear. Não se vê uma bifurcação como com
merge. Dá a impressão de que todas as alterações foram feitas por ordem, sem desenvolvimento em paralelo.
Por que escolher um ou o outro?
- Merge: usado para preservar o histórico completo e explícito do projeto. É útil quando quer ver os pontos precisos em que as alterações foram combinadas.
- Rebase: usado para criar um histórico mais limpo e mais simples. É prático se quiser que o histórico pareça ter uma sequência de desenvolvimento direta, sem branches secundárias.
Em suma, se quiser que o histórico do projeto mostre como as funcionalidades foram desenvolvidas em paralelo e combinadas, use merge. Se preferir que o histórico seja simples e direto (como se tudo tivesse sido desenvolvido numa ordem linear), use rebase.