[GIT] Squash - Aula 14
Squash
O Squash é uma técnica usada para combinar múltiplos Commits em um único Commit. Isso é útil quando você deseja organizar o histórico de Commits de maneira mais limpa antes de compartilhar ou integrar suas mudanças com uma Branch principal.
Como fazer um Squash
O Squash é feito durante um Rebase Interativo:
Rebase Interativo -i = uma variação do comando rebase
que permite modificar o histórico de Commits de forma personalizada.
git rebase -i HEAD~n
n = Número de commits anteriores que você quer reescrever.
Exemplo
Façamos o seguinte Rebase Interativo:
git rebase -i HEAD~3
o resultado:
pick a1b2c3 Commit 1
pick d4e5f6 Commit 2
pick g7h8i9 Commit 3
Vamos combinar os 3 em um único Commit, para isso devemos alterar pick
para squash
ou s
.
pick a1b2c3 Commit 1
squash d4e5f6 Commit 2
squash g7h8i9 Commit 3
Obs: Após salvar, o Git pedirá para digitar a mensagem do novo Commit resultante.
Lembrando que o Git irá gerar uma nova Hash para o Commit único criado.
Vamos checar o Squash:
git log --oneline
Push Force
Devemos observar que ao fazer um Squash, o Git irá reescrever o histórico dos Commits. Isso inclui criar um novo Commit com uma Hash diferente, e as vezes podemos sumir com algum Commit que já estava no repositório remoto.
Ao tentar realizar o Push, o Git observará a divergência entre o histórico local e o histórico remoto, o Git sempre tentará garantir a integridade do histórico remoto, por isso não permitirá o Push.
Observando isso, se torna necessário realizar um Push Force:
git push --force
O comando git push --force
informa ao Git que você quer sobrescrever o histórico remoto com o novo histórico local, mesmo que isso reescreva os Commits.
Para maior segurança podemos utilizar o --force-with-lease
, pois ele verifica se ninguém fez novas mudanças no repositório remoto antes de sobrescrever.
git push --force-with-lease