Neste artigo, falarei sobre como o Git Rebase funciona, as diferenças entre Git Rebase e Git Merge e como trabalhar com Git Rebase. Então vamos começar.
Digamos que você tem um repositório Git com os compromissos A, B, C no mestre filial. Então, você criou um novo ramo Algum -Branch e acrescentou 2 novos compromissos D e E para o Algum -Branch filial.
Fig 1: Histórico de Commits Inicial.
Agora, digamos, você esqueceu de adicionar algo no mestre filial. Então, você volta ao mestre ramificar e adicionar uma nova confirmação G para o mestre filial. Seu histórico de git deve parecer o seguinte.
Fig 2: Compricle History After Adicionar Commit G no ramo mestre.
Tudo parece bem. Agora, se você quisesse todas as alterações que você fez para o Algum -Branch ramo para estar no mestre ramo, você pode mesclar o Algum -Branch ramo para o mestre filial. É isso que git mesclar fazer.
E se você quiser o compromisso G estar disponível no Algum -Branch filial? Bem, você pode usar o Git Rebase para isso.
Da história do compromisso na Fig 2, você pode ver que o ramo Algum -Branch começa a partir do compromisso C. Se você fizer uma rebase git em Algum -Branch, então começaria a partir do commit G Como mostrado na Fig 3 abaixo. Observe que, o conteúdo do compromisso D e E mudará também após a operação de rebase. Os compromissos D e E incluirá as mudanças no compromisso G. É por isso que eu adicionei * símbolo antes dos compromissos D e E.
Se você quiser saber como seria a história do commit se eu a mesclar, dê uma olhada na Fig 4. Eu o incluí apenas para que você possa compará -lo com o git rebase.
Fig 4: Compricle History se a mesclagem do Git foi usada.
Agora que você sabe o que é Git Rebase, a diferença entre Git Rebase e Git Merge e por que o Git Rebase que ele usou, mostrarei como usá -lo na próxima seção deste artigo abaixo.
Git Rebase Workflow:
Nesta seção, criarei um novo repositório Git no meu computador local e mostrarei como o Git Rebase funciona. Eu recomendo que você tenha um bom entendimento do Git Rebase antes de aplicá -lo em seu projeto.
Primeiro, crie um novo repositório Git Rebase-deMo/ no seu computador da seguinte forma:
$ git init rebase-Demo
Agora, navegue para o Rebase-deMo/ diretório da seguinte maneira:
$ CD Rebase-Demo/
Agora, crie um novo arquivo teste.TXT do seguinte modo:
$ echo "a"> teste.TXT
O teste.O arquivo txt contém apenas uma linha A. Digamos, este é o seu código de projeto inicial.
Agora, comprometa as mudanças da seguinte maneira:
$ git add .
$ git Commit -m 'a'
Agora, adicione outra linha B para o teste.TXT arquivo como mostrado na captura de tela abaixo.
Agora, comprometa as mudanças da seguinte maneira:
$ git add .
$ git Commit -M 'B'
Agora, vamos adicionar outra linha C ao teste.TXT arquivo.
Além disso, comprometa as mudanças da seguinte maneira:
$ git add .
$ git commit -m 'c'
Agora, o histórico de compromissos do ramo principal deve parecer o seguinte:
$ git log --oneeline
Agora, digamos, você tem algumas novas idéias que deseja experimentar. Então, vamos criar e fazer check -out para uma nova filial novo recurso do seguinte modo:
$ git checkout -b -rumor novo
Agora, adicione sua nova ideia (a linha D digamos) para o teste.TXT arquivo.
Agora, comprometa as mudanças da seguinte maneira:
$ git add .
$ git Commit -m 'd'
Agora, adicione a linha E ao teste.TXT arquivo.
Compreenda as mudanças da seguinte forma:
$ git add .
$ git Commit -m 'e'
Agora, a história do compromisso do novo recurso A filial deve parecer o seguinte:
$ git log --oneeline
Veja como são os compromissos em ordem um < B < C < D < E?
Agora, você se lembra de que esqueceu de adicionar algo ao mestre ramo que você também queria estar no novo recurso filial! Então, consulte o mestre filial.
Eu adicionei uma nova linha no final do teste.TXT arquivo como você pode ver.
Agora, comprometa as mudanças da seguinte maneira:
$ git add .
$ git Commit -m 'g'
Agora, a história do compromisso do mestre o ramo deve ficar assim.
A < B < C < G
Agora, para refazer os compromissos do mestre ramo para o novo recurso ramo, primeiro check -out para o novo recurso filial.
$ git checkout-rumor novo
Agora, faça uma rebase git do mestre ramo da seguinte forma:
$ git rebase mestre
Alguns mesclados conflitam! Vamos consertar isso.
Bem, as mudanças que fiz no commit G e D são conflitantes um com o outro. Eu quero manter esses dois.
Depois de consertar o conflito de mesclagem, o teste.TXT O arquivo deve parecer o seguinte:
Agora, adicione as alterações à área de preparação da seguinte forma:
$ git add .
Agora, continue o Rebase operando da seguinte maneira:
$ git rebase -Continue
Outro conflito de mesclagem! Bem, isso pode acontecer. Rebase muda o histórico de comprometimento do git. Então, coisas assim são esperadas.
Parece que o processo de mesclagem falhou devido a algumas linhas vazias. Vamos consertar isso.
Depois de consertar o conflito de mesclagem, o teste.TXT o arquivo deve parecer o seguinte.
Agora, adicione as alterações à área de preparação da seguinte forma:
$ git add .
Agora, continue a operação de rebase da seguinte maneira:
$ git rebase -Continue
Git Rebase está completo.
Como você pode ver, o histórico de compromissos do novo ramo é atualizado. Agora, a história do commit é a seguinte:
A < B < C < G < D < E
Assim como o esperado.
O final teste.TXT o arquivo deve parecer o seguinte.
Git Rebase é uma ferramenta poderosa. Mas, você nunca deve usá -lo em repositórios compartilhados do Git. Use -o apenas nos repositórios Git que você trabalha apenas. Caso contrário, você enfrentará muitos problemas ao longo do caminho.
Então, é assim que você usa o git rebase. Obrigado por ler este artigo.