|
|
Utilizando o `git rebase` é possível esmagar vários commits em apenas um. Porque isso é interessante?
|
|
|
1. As funcionalidades ou correções de bugs devem ser "atômicas", ou seja, entregues em 1 commit apenas.
|
|
|
2. Facilita o rastreamento da funcionalidade e identificação de todas as mudanças de código que foram feitas na funcionalidade.
|
|
|
3. Torna-se **MUITO** mais fácil reverter uma funcionalidade quando detectamos que ela inseriu um defeito no código.
|
|
|
|
|
|
Antes de começar, verifique a regra de ouro:
|
|
|
|
|
|
**Faça rebase apenas em commits de branches onde você é o único desenvolvedor**
|
|
|
|
|
|
Assumindo que temos os seguintes commits exibidos pelo comando `git log`:
|
|
|
|
|
|

|
|
|
|
|
|
Podemos esmagar quantos commits quisermos em apenas 1 da seguinte forma:
|
|
|
|
|
|
`git rebase -i HEAD~3` onde `HEAD` indica o nosso commit atual, e 3 é o número de commits que queremos analisar. O número pode ser maior, já que esse comando por si ainda não completa o squash.
|
|
|
|
|
|
Quando executarmos esse comando, a seguinte tela será exibida:
|
|
|
|
|
|

|
|
|
|
|
|
Perceba que a ordem dos commits está invertida comparada com o `git log`. Os commits mais recentes estão abaixo. Os comentários mostram as opções disponíveis: se quisermos juntar os commits 2 e 3 sobre o commit 1, só precisamos trocar a palavra "pick" por "squash" (ou simplesmente "s") sem aspas, nos commits que queremos esmagar. Nossa edição deve ficar desta forma:
|
|
|
|
|
|

|
|
|
|
|
|
Precisamos então salvar e sair do nosso editor. Se estiver usando o nano, as instruções para sair encontram-se na parte debaixo da tela (`Ctrl+X`, seguido de um S/Y para confirmar, e um `ENTER`). Se estiver utilizando o vi/vim, pressione `ESC`, seguido de `:wq`, e `ENTER`.
|
|
|
|
|
|
Por fim o git permitirá a edição da mensagem de commit. Por padrão ele mostrará as 3 mensagens de commit, além de linhas que começam com `#` que são comentários e não aparecerão na mensagem final. Altere a vontade a mensagem, salve o arquivo e saia.
|
|
|
|
|
|
Para atualizar o branch remoto (já que alguns commits foram destruídos e outros tiveram a referência alterada), utilize o commando `git push --force-with-lease`. |
|
|
\ No newline at end of file |