git rebase

Photo by Yancy Min on Unsplash

git rebase

git rebase

Continuando a série sobre git conceitual, no artigo anterior falei sobre merges, juntando versões diferentes do projeto.

Outra opção para integrar versões diferentes do projeto é o rebase.

rebase

O rebase reescreve, commit a commit, todos os commits do branch de origem desde o ponto em que divergiram (ancestral comum) no branch de destino (upstream).

Cenário antes de executar o rebase: git-rebase-before.png

Após executar o rebase do branch feature/asas no main: git-rebase-after.png

Através do Learn Git Branching podemos executar e visualizar de forma animada a operação de rebase:

git-rebase.gif

Note que os commits anteriores continuarão existindo no repositório, só não serão referenciados por nenhum branch e por isso não estarão visíveis no histórico.

Caso seja necessário reverter a operação, é possível reapontar o branch para o commit que estava antes do rebase. (isso não será tratado nesse artigo, mas as referências são: reflog para localizar o id do commit anterior caso não tenha, reset para reapontar a branch para o commit)

Como o rebase reescreve o histórico criando novos commits, caso os commits já tenham sido compartilhados com outras pessoas, elas podem ter problemas.

rebase interativo

Também é possível fazer um rebase interativo, onde você cria um script que diz o que fazer com cada commit: usar ele, juntar com o anterior, pausar pra editar manualmente, reescrever a mensagem etc.

conclusão

  • o rebase modifica o histórico
  • não reescreva histórico que já foi compartilhado em algum repositório remoto, pois pode impactar o trabalho de outras pessoas.

referências