Middle
Qual é a diferença entre os comandos merge e rebase no sistema de controle de versões Git?
sobes.tech IA
Resposta da IA
merge combina ramos criando um novo commit com dois pais, preservando a história de alterações. rebase move os commits de um ramo para outro, ordenando linearmente a história, mas alterando os hashes dos commits.
-
No
merge:- Um novo commit de fusão é criado.
- A história dos ramos permanece explícita.
- Podem ocorrer conflitos, resolvidos no novo commit.
# Exemplo de uso de merge git checkout ramo-funcionalidade git merge main # Resolução de conflitos, se houver git commit -m "Mesclar main na ramo-funcionalidade" -
No
rebase:- Os commits "são movidos" e aplicados sobre o ramo alvo.
- A história torna-se linear, pode parecer "mais limpa".
- Os hashes dos commits movidos mudam.
- Pode ocorrer conflito para cada commit movido.
- Não recomendado para ramos que já foram publicados e usados por outros desenvolvedores, pois altera a história.
# Exemplo de uso de rebase git checkout ramo-funcionalidade git rebase main # Resolução de conflitos, se houver (repetir para cada commit em conflito) git add . git rebase --continue # ou git rebase --skip para pular o commit # ou git rebase --abort para cancelar
| Característica | merge | rebase |
|---|---|---|
| Alteração da história | Mantém a história | Altera a história (sobrescreve) |
| Commits | Cria um commit de merge | Move commits existentes |
| Linearidade da história | Não (ramificações divergentes) | Sim (simplifica a história) |
| Abordagem | Não destrutiva | Potencialmente destrutiva |
| Aplicabilidade | Ramos públicos e compartilhados | Ramos locais e pessoais |