Executando verificação de segurança...
5

[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
Carregando publicação patrocinada...