Sobes.tech
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