Sobes.tech
Junior

O que é squash?

sobes.tech IA

Resposta da IA

O squash (aplainar) no Git é a combinação de vários commits em um único. Permite simplificar a história dos commits, torná-la mais organizada e legível.

Normalmente, o squash é realizado ao:

  • Mesclar um branch de funcionalidades com o branch principal (merge de feature branch). Um branch curto com muitos commits pequenos (correções, mudanças cosméticas) pode ser comprimido em um único commit grande que representa toda a funcionalidade.
  • Editar a história dos commits (rebase interativo). Permite combinar commits sequenciais para uma apresentação mais limpa das alterações.

O processo de squash geralmente inclui:

  1. Seleção de commits: Definir o intervalo de commits a serem combinados.
  2. Edição (rebase interativo): Usar o comando git rebase -i <commit anterior ao intervalo> ou git rebase -i HEAD~<número de commits>.
  3. Marcar squash ou s: No editor que abrir, marcar os commits a serem combinados com o anterior, com a palavra squash ou a abreviatura s. O primeiro commit na lista fica com pick.
  4. Editar a mensagem: O Git abrirá um editor para escrever uma nova mensagem para o commit combinado.
  5. Aplicar as mudanças: Após salvar o arquivo de história do rebase e o arquivo de mensagem do novo commit, o Git realizará a combinação.

Exemplo de rebase interativo para combinar os últimos três commits:

git rebase -i HEAD~3
# Será aberto um editor com linhas como:
# pick 08f66c1 Commit 1
# pick d7e8a23 Commit 2
# pick 1b2c3d4 Commit 3
# Alterar para:
# pick 08f66c1 Commit 1
# squash d7e8a23 Commit 2
# squash 1b2c3d4 Commit 3
# Salvar e sair. Depois editar a mensagem do novo commit.

Vantagens do squash:

  • Histórico limpo: Reduz o número de commits menores, tornando os logs de alterações mais compreensíveis.
  • Facilita a busca: É mais fácil encontrar alterações importantes na história.
  • Conveniência para desfazer: Um commit grande é mais fácil de reverter do que muitos pequenos.

Desvantagens:

  • Perda de detalhes: A fusão de commits leva à perda de informações sobre cada passo menor.
  • Complexidade no trabalho em equipa: Combinar commits que já foram enviados para um repositório comum pode causar conflitos em pushes futuros por outros membros da equipa. Para commits publicados, é necessário usar git push --force, o que pode ser arriscado.

O uso de squash deve ser bem pensado e depender da política da equipa e das especificidades do projeto.