Conteúdo do Curso
Fundamentos do GitHub
Fundamentos do GitHub
Noções Básicas de Rebase
Realização de um Commit no Branch main
Início com a realização de um commit diretamente no branch remoto main
por meio da edição do arquivo README.md
no repositório remoto. Isso fará com que o branch main
e o branch feature/payment
apresentem um histórico de commits divergente.
Linha adicionada ao arquivo:
Mensagem correspondente do commit:
Compreendendo o Rebasing
Como mencionado no capítulo anterior, após o branch feature ser revisado e testado, ele pode e deve ser mesclado de volta ao branch main
. Até agora, utilizamos apenas o comando git merge
para esse propósito. No entanto, outra abordagem é utilizar o comando git rebase
.
Rebasing é o processo de mover ou combinar uma sequência de commits para um novo commit base. Isso é feito ao reproduzir as alterações de um branch em outro branch, resultando em um histórico de commits linear.
Quando criamos um branch, o Git rastreia o commit mais recente em ambos os branches. Se apenas um branch tiver novas alterações, o Git pode avançar rapidamente e aplicar as mudanças. No entanto, se ambos os branches tiverem novas alterações, o Git cria um novo commit de merge, resultando em um merge de três vias.
Veja como seria um merge de três vias no nosso caso, onde C4 era o commit mais recente no branch feature/payment
antes da mesclagem:
No entanto, mesclagens de três vias podem dificultar a depuração devido ao histórico dividido e não linear. Ao realizar o rebase, alteramos a base dos nossos commits e os reaplicamos sobre a nova base, permitindo que o Git execute uma mesclagem fast-forward e mantenha um histórico linear.
Aqui está uma animação para ilustrar como o rebase pode ser realizado em nosso caso (os identificadores dos commits não correspondem aos reais aqui):
Ao fazer rebase em um branch, você está essencialmente reescrevendo seu histórico. Isso significa que os commits antigos são substituídos por novos, que possuem identificadores diferentes (hash sums) porque são baseados em snapshots diferentes do código. Como mostrado na animação acima, o identificador do commit no branch feature/payment
mudou após o rebase.
Obrigado pelo seu feedback!