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:
- Seleção de commits: Definir o intervalo de commits a serem combinados.
- Edição (rebase interativo): Usar o comando
git rebase -i <commit anterior ao intervalo>ougit rebase -i HEAD~<número de commits>. - Marcar
squashous: No editor que abrir, marcar os commits a serem combinados com o anterior, com a palavrasquashou a abreviaturas. O primeiro commit na lista fica compick. - Editar a mensagem: O Git abrirá um editor para escrever uma nova mensagem para o commit combinado.
- 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.