Rebase

O git merge e o git rebase são comandos usados para integrar mudanças de diferentes branches no Git, mas funcionam de maneiras distintas e são usados em diferentes cenários. Vamos explorar cada um:

Git Merge

O git merge integra as mudanças de uma branch em outra, criando um commit de merge que preserva o histórico de ambas as branches.

Como funciona:

  1. Suponha que você tem duas branches: main e feature.

  2. Para integrar as mudanças da branch feature na branch main, você faria:

    git checkout main
    git merge feature

Resultado:

  • O histórico das duas branches é preservado.

  • Um novo commit de merge é criado, unindo as mudanças das duas branches.

Exemplo de histórico:

*   commit D (merge)
|\
| * commit C (feature)
|/
*   commit B (main)
*   commit A (main)

Git Rebase

O git rebase aplica os commits de uma branch sobre outra, reescrevendo o histórico de commits.

Como funciona:

  1. Suponha que você tem duas branches: main e feature.

  2. Para rebasiar a branch feature sobre a branch main, você faria:

Resultado:

  • O histórico da branch feature é reescrito, aplicando seus commits no topo da branch main.

  • Não há um commit de merge; em vez disso, os commits da branch feature são "reaplicados" sobre a main.

Exemplo de histórico:

Principais Diferenças

  1. Histórico:

    • git merge preserva o histórico das duas branches, mostrando claramente de onde cada mudança veio.

    • git rebase reescreve o histórico da branch que está sendo rebased, criando um histórico linear.

  2. Commits de Merge:

    • git merge cria um commit de merge.

    • git rebase não cria commits de merge.

  3. Uso Típico:

    • git merge é útil quando você deseja preservar o histórico completo e ver como as branches se integraram.

    • git rebase é útil para criar um histórico linear, mais limpo, sem commits de merge.

Escolha entre Merge e Rebase

  • Use git merge quando você deseja manter um histórico de commits que reflete exatamente como o desenvolvimento ocorreu.

  • Use git rebase quando você quer um histórico linear e limpo, especialmente antes de integrar suas mudanças em uma branch compartilhada como main.

Exemplo de Conflitos

Ambos os métodos podem resultar em conflitos que precisam ser resolvidos manualmente. A principal diferença é como esses conflitos aparecem no histórico.

Ao entender as diferenças e implicações de git merge e git rebase, você pode escolher a melhor abordagem para o seu fluxo de trabalho de desenvolvimento.

Laboratório

Situação atual da branch main:

Criação da branch feature/arquivo-rebase:

Criação e commit do arquivo rebase.txt:

Retornar para a branch main para simular a existência de mais algum commit nela:

Verificação da situação da branch feature/arquivo-rebase:

Alteração do arquivo rebase.txt na branch feature/arquivo-rebase:

Rebase

Last updated