Diferenças entre Git Merge e Git Rebase
Entendendo o Conceito
O Git disponibiliza diferentes estratégias para integrar alterações de uma branch em outra, sendo as principais o git merge e o git rebase. Embora ambas as operações tenham o objetivo de unificar o código, elas realizam esse processo de formas distintas e geram históricos de commits diferentes no repositório.
O git merge combina os históricos das branches e preserva o histórico cronológico original. Quando ocorre divergência entre as branches, o Git cria um commit específico de mesclagem, conhecido como "merge commit", que une as duas linhas de desenvolvimento. Essa operação mantém a integridade do histórico exatamente como ele aconteceu.
O git rebase reescreve o histórico de commits. Ele retira temporariamente os commits da branch atual, atualiza a base da branch com os commits mais recentes da branch de destino e reaplica os commits retirados um a um sobre essa nova base. Isso resulta em um histórico linear, sem a criação de um merge commit.
Passo a Passo
Alternativa A: Integrando alterações com Git Merge
- Acesse a branch de destino onde as alterações serão consolidadas:
git checkout main
- Execute o comando de mesclagem informando a branch de origem das alterações:
git merge feature-login
- Caso ocorram conflitos, resolva-os manualmente nos arquivos afetados.
- Adicione os arquivos resolvidos à área de preparação:
git add .
- Conclua o processo criando o commit de mesclagem:
git commit
Alternativa B: Integrando alterações com Git Rebase
- Acesse a branch local de desenvolvimento que receberá a nova base:
git checkout feature-login
- Execute o rebase apontando para a branch principal atualizada:
git rebase main
- Caso ocorram conflitos, edite manualmente os arquivos afetados.
- Adicione os arquivos resolvidos à área de preparação:
git add .
- Continue a aplicação dos commits restantes do rebase:
git rebase --continue
- Após concluir o rebase de todos os commits, mude para a branch principal:
git checkout main
- Realize a mesclagem rápida do tipo fast-forward:
git merge feature-login
Explicando o código
Os comandos utilizados envolvem parâmetros e opções específicas que determinam o comportamento do Git:
git merge <nome-da-branch>: Integra as alterações da branch especificada na branch atualmente ativa.<nome-da-branch>: Define a ramificação de origem que contém as alterações a serem mescladas.
git rebase <nome-da-branch>: Move os commits da branch atual para o topo da branch especificada.<nome-da-branch>: Define a nova base sobre a qual os commits locais serão reaplicados.
git rebase --continue: Retoma o processo de rebase após a resolução manual de conflitos.--continue: Flag utilizada para dar prosseguimento ao rebase após tratar conflitos em etapas intermediárias.
git checkout <nome-da-branch>: Altera o diretório de trabalho para a branch indicada.<nome-da-branch>: Nome da branch para a qual o apontador HEAD será movido.
git add <caminho>: Adiciona o conteúdo do arquivo modificado à área de preparação.<caminho>: Especifica o diretório ou arquivo a ser preparado, onde o caractere ponto representa o diretório atual por completo.
Observações
- O
git mergenão altera os commits existentes, o que o torna uma operação segura para branches públicas e compartilhadas por múltiplos desenvolvedores. - O
git rebasereescreve o histórico do repositório, alterando os hashes dos commits originais. - Nunca utilize
git rebaseem commits que já foram enviados para um repositório remoto público e que servem de base para o trabalho de outras pessoas. - Em caso de múltiplos conflitos na mesma linha de código em commits diferentes, o
git rebaseexigirá a resolução de conflitos a cada commit reaplicado, enquanto ogit mergeexigirá apenas uma única resolução global durante o merge commit. - Se houver necessidade de cancelar um rebase em andamento devido a dificuldades na resolução de conflitos, utilize o comando
git rebase --abort.
Referências
- GeeksforGeeks. Git - Difference Between Merging and Rebasing.
- DEV Community. Git Rebase vs Git Merge: A Comprehensive Guide.
- Refine. Git Merge vs. Git Rebase, The Ultimate Guide to Combining Branches.
- Built In. Git Rebase vs. Merge: Which to Use?.
- Stack Overflow. What's the difference between 'git merge' and 'git rebase'?.
- GitHub. What is the difference between git merge and git rebase in a typical workflow?.