Diferença entre Git ReBase e Merge

Neste artigo, discutiremos duas dessas ferramentas, Rebase e Merge, e suas diferenças. O GIT é um dos controladores de versão distribuída DVCS mais comumente usados ​​entre os programadores, devido à sua natureza dinâmica e à vasta disponibilidade de ferramentas para lidar com as versões. Existem duas maneiras pelas quais podemos enviar nossas alterações de um ramo para outro. Uma é usando Rebase e a outra é Merge, que é bastante popular. Abaixo, aprendemos a melhor comparação entre Git ReBase e Merge.

Comparação cara a cara entre Git ReBase vs Merge (Infographics)

Abaixo estão as 5 principais comparações entre Git ReBase e Merge:

Principais diferenças entre Git ReBase e Merge

Vamos discutir a principal diferença entre Git ReBase e Merge:

1. Git Rebase

O Git Rebase começa seu trabalho a partir de um commit comum entre os dois ramos. Mestre e recurso, a partir daqui, ele compara os dois e captura o instantâneo da diferença que é feita em um dos ramos e depois o adiciona a outros. Vejamos isso com as capturas de tela abaixo.

Vamos imaginar que temos uma ramificação principal e a confirmação mais recente de m2, como mostrado na captura de tela acima. A partir desta confirmação, criamos um ramo de recurso e fizemos algumas modificações e confirmamos com a mensagem f1. Agora, vamos considerar que alguém mesclou seu trabalho ao mestre e agora o último commit do mestre é m3, não m2, como mostrado abaixo.

E também continuamos trabalhando no ramo de recursos para adicionar seu último commit a f2, como mostrado abaixo.

Como visto acima, no screengrab, dominamos o commit m3 mais recente e temos um recurso que não está atualizado com o master, pois ele foi criado a partir do snapshot de commit m2 que possui o commit mais recente como f3. Agora, a combinação desses esforços com o mestre para gerar é mostrada abaixo.

Agora precisamos integrar as alterações acima, que podem ser feitas de duas maneiras, uma com mesclagem e outra com rebase. Aqui veremos como integrar com o rebase.

$ git checkout feature
Switched to a new branch 'feature'
$ git rebase master

A partir do comando rebase acima, tentaremos procurar uma confirmação comum do mestre e do recurso e, neste caso, é m2. E, como precisamos refazer o master, ele procurará adições feitas com o master e terá o snapshot m3 e o recurso de rebase de m2 para m3. Então agora temos um recurso com m3 (no lugar de m2), f1, f2 confirma. Agora posso me candidatar a refazer o recurso para atualizar a ramificação principal com as alterações do recurso. Uma coisa a lembrar é que qualquer alteração no mestre deve ser auditada. Aqui estou apenas mostrando, por exemplo, propósito.

$ git checkout master
Switched to a new branch 'master'
$ git rebase feature

Agora, aplicaremos o ramo de recurso de confirmação mais recente, que é f2, para o mestre, e o último instantâneo de confirmação do mestre será f2. Você pode listar as confirmações usando o comando git log, mas precisamos verificar primeiro em qual ramificação precisamos ver o log como abaixo.

$ git checkout feature
Switched to a new branch 'feature'
$ git log

Agora, com o rebase, integramos as atualizações de um recurso a ser dominado. Vamos tentar conseguir isso por fusão.

2. Git Merge

Também usaremos a captura de tela acima para a referência aqui, e podemos obter o mesmo que conseguimos com rebase e mesclagem.

O Git merge confirma o último commit que tivemos no ramo de recursos e aqui o caso é com o commit de f2, que reúne todas as alterações e o mescla com o último commit que temos no ramo principal, m3 aqui. Isso parece complicado, mas pode ser facilmente executado pelo comando mesclar. Podemos fazer uma mesclagem direta ou mescla de squash e a diferença em ambos.

$ git checkout master
Switched to a new branch 'master'
$ git merge feature

O comando acima terá todos os commits do recurso e adicionará também o log do mestre. Para evitar que possamos usar squash para que, no log do mestre, após m3 apenas um commit seja atualizado

$ git checkout master
Switched to a new branch 'master'
$ git merge –squash feature

deve-se ter cuidado ao usar o git rebase e tentar evitá-lo. A regra de ouro é evitá-lo usando agências públicas.


Basta olhar para o cenário acima. Isso pode acontecer quando você tenta rebase o master em cima do seu ramo de recursos e nosso ramo principal é público, agora o ramo principal é atualizado, mas todo mundo está trabalhando em uma versão mais antiga do mestre. Como o rebaseamento resultará em novos commit, o git pode pensar que a história do ramo principal divergiu de todos os outros. A única maneira de resolver isso será sincronizar o mestre, mesclando-o novamente e ter um conjunto resultante de confirmações que serão confusas.

Tabela de comparação do Git ReBase vs Merge

A tabela abaixo resume as comparações entre Git ReBase e Merge:

Base de comparação entre Rebase e Merge Rebase Mesclar
ConfirmaEle altera e reescreve o histórico, criando um novo commit para cada commit na ramificação de origem.Ele incorpora todas as alterações na origem, mas mantém a ancestralidade de cada histórico de consolidação, mas incorpora todas as alterações na origem, mas mantém a ancestralidade de cada histórico de consolidação.
SeleçãoAqui, primeiro verificamos a ramificação que precisa ser reestruturada e, em seguida, selecionamos o comando rebase
para adicionar atualizações a outras pessoas.
Aqui, verifique primeiro a ramificação que precisa ser mesclada primeiro. Em seguida, execute a operação de mesclagem e a confirmação mais recente da fonte
será mesclado com a confirmação mais recente do mestre.
Tratamento de ConflitosComo o histórico de commit será reescrito para entender o conflito, será difícil
alguns casos.
O conflito de mesclagem pode ser facilmente tratado, entendendo o erro que foi executado durante a mesclagem.
regra de ouroDeve usar nos ramos públicos, pois o histórico de confirmação pode causar confusão.Não há muito mal ao executar ramificações públicas.
AcessibilidadeAs confirmações que já foram alcançáveis ​​não serão mais alcançadas após a nova reformulação, pois o histórico de alterações foi alterado.

As confirmações permanecerão acessíveis
dos ramos de origem.

Conclusão

Mesclar e Rebase são duas ferramentas poderosas do Git e ambas são usadas para incorporar as alterações nos desvios, mas devemos ter um pouco de cuidado com o rebase, pois ele reescreverá o histórico de confirmações e usá-las em desvios públicos pode dificultar o trabalho de outros causando confusão. Considerando que você pode usar a opção de mesclagem, pois suas confirmações são acessíveis a partir da ramificação de origem e pode facilmente resolver conflitos de mesclagem, se tivermos um entendimento adequado.

Artigos recomendados

Este é um guia para a principal diferença entre Git ReBase e Merge. Aqui também discutimos as principais diferenças entre Git ReBase e Merge com infográficos e tabela de comparação. Você também pode consultar os seguintes artigos para saber mais -

  1. Git Fetch vs Git Pull - Principais Diferenças
  2. Abstração vs Encapsulamento | Top 6 Comparação
  3. Arquitetura HBase com vantagens
  4. Perguntas da entrevista do GIT | 11 principais
  5. Sistema de Controle de Versão GIT
  6. Git Push
  7. Encapsulamento em JavaScript
  8. Guia completo do comando remoto Git
  9. Três estágios do ciclo de vida do Git com o fluxo de trabalho
  10. Como usar o GIT Cherry-pick com o Exemplo?