Durante o desenvolvimento é muito comum encontrarmos alterações para fazermos em arquivos que já foram alterados e não estão mais no último PR. Para não gerar um grande número commits de ajustes pequenos podemos reorganizar estas alterações utilizando o rebase interativo.
Preciso deixar apenas um aviso importante, como alteramos a ordem dos
commits isso irá gerar uma reescrita de histórico de commits, assim caso
você já tenha feito o push da versão anterior para uma branch remota
será necessário refazer o procedimento com o famigerado --force, o
que pode trazer perdas de commits caso essa branch esteja sendo usada
por outra pessoa, outro ponto, evite fazer reescrita de histórico na
branch principal do projeto.
Vamos considerar o seguinte cenário: temos um pequeno projeto, primeiro eu iniciei o repositório e criei um arquivo README.md e commitei, depois criei as funções utilitárias no módulo lib.js e commitei. Por último criei o main.js para que chamará a função em questão. Todas as alterações ainda estão na minha máquina e não mergeei na master remota. A estrutura ficou como a imagem abaixo:
 |
Estrura de arquivos e os três commits iniciais
|
Após isso percebi que é necessário fazer uma correção no arquivo
lib.js. A primeira coisa que faço então é esta alteração e commito ela:
 |
Agora o fix está como o último commit
|
Partindo do principio que esta correção era necessária, podemos entender que todos os commits desde a criação da biblioteca de funções
lib.js até a correção possuem um bug e estão quebrados. Como estas alterações ainda estão na minha branch, porque não podemos organizar isso melhor? Ai entra o rebase interativo.
O rebase interativo permite reorganizar nossos commits, alterar mensagens e diversas outras coisas, para iniciar o processo no Git é muito simples, basta você rodar o comando git rebase -i HEAD~3, traduzindo: inicie o rebase interativo a partir de três commits a partir da HEAD (o último commit). Ao executar temos a seguinte tela:
 |
Temos a lista de commits e um manual do que temos disponível no rebase
|
A janela que abre contém a lista de commits e algumas instruções do que podemos fazer. No nosso caso queremos juntar o commit
Fix na lib.js com o commit
Criada lib de funções, para isso vamos fazer duas coisas, reordernar os commits e pedir para fazer um
fixup no commit de fix, ficando:
 |
Os commits foram reordenados pedimos para aplicar fixup no commit de fix
|
O comando
fixup irá fundir o commit de sua linha com o de cima (no caso o commit mais antigo), juntando as alterações em um único commit. Agora podemos salvar e sair para assim o rebase prosseguir até o fim:
 |
Rebase aplicado e commits organizados |
|
Após isso os commits estarão mais organizados, isso ajudará você a navegar melhor pelo seu histórico de commits, ajudará também os revisores que poderão fazer o review por commits e não ficar pescando trechos de códigos em diversos commits diferentes.
Nenhum comentário:
Postar um comentário