Git Tutorial - Rebase
Nós cobrimos fusões básicas como
-
Fusão rápida
-
Fusão em três vias (recursiva)
Neste tutorial, vamos introduzir uma das características mais importantes do Git - rebasing.
O que é git rebase
?
Rebase significa que você está mudando o commit da raiz dos ramos baseado, ou em outras palavras, você está resetando o commit da base para o commit recente do ramo que você está planejando fundir, como o ramo master
.
Vamos ver como isto se parece,
Nós temos os ramos master
e Feature
neste diagrama e enquanto trabalhávamos no nosso ramo Feature
, outros membros da equipe continuaram a fazer algum trabalho no master
.
Nós queremos rebasear nosso branch antes de fundi-lo de volta no master
e quando rodamos o comando rebase, ele muda o commit em que nosso branch de testes é baseado ao invés de apontar para C3
ao invés de C1
. O gráfico abaixo mostra o que acontece após o rebase.
Quando fundimos as alterações, só tem de fazer uma fusão rápida novamente, porque os commits são agora baseados no último commit do master
. É por isso que o rebasing é uma das características mais poderosas do git.
Depois que você fundir este ramo rebased Feature
para o master
, o gráfico de log de commit será como abaixo,
Parece que o ramo Feature
nunca existiu e todos os registros de commit estão na linha reta.
Workflow de Rebase
-
Criar o ramo de característica
$ git checkout -b Feature
-
Faça mudanças neste ramo e comprometa-se
$ git add modified.txt
$ git commit -m 'coment here'
-
Rebase ramo de recurso para
master
$ git rebase master
-
Fundir o ramo de recursos rebaixado no
master
$ git checkout master
$ git merge Feature
Regra de ouro do rebaseamento
A regra de ouro é nunca rebaixar um ramo que você disponibilizou publicamente por causa da reescrita da história.
Se você rebase um ramo público e alguém trabalha fora desse ramo depois que você rebase obter essas novas alterações no seu ramo master
será muito difícil porque os outros desenvolvedores ainda trabalham com o ramo original master
.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook