Como Fazer Squash and Merge
O Squash and Merge é o processo de condensar todos os commits de uma branch secundária num único commit antes de integrá-los na branch principal (master ou main).
1. Via Interface Web (GitHub/GitLab)
Esta é a forma mais comum e recomendada para grandes projetos, pois permite que a revisão de código (Code Review) seja feita antes da integração.
No GitHub:
Abra o seu Pull Request (PR).
Navegue até ao fundo da página, na secção de "Merge".
Não clique diretamente no botão verde. Clique na seta para baixo ao lado do botão.
Selecione a opção "Squash and merge".
Clique no botão que agora diz "Squash and merge".
Irá aparecer uma caixa para editar a mensagem do commit final. Resuma o que foi feito e confirme.
2. Via Linha de Comandos (CLI)
Se precisar de fazer isto manualmente no seu terminal, o fluxo é o seguinte:
# 1. Certifique-se de que a sua branch de funcionalidade está atualizada (Rebase)
git checkout dev_charles
git fetch origin
git rebase origin/master
# 2. Volte para a branch principal
git checkout master
git pull origin master
# 3. Realize o merge com a flag --squash
# Isto traz todas as alterações mas não cria os commits individuais
git merge --squash dev_charles
# 4. Crie o commit único consolidado
git commit -m "feat: descrição completa da nova funcionalidade"
# 5. Envie para o servidor
git push origin master
3. Vantagens de utilizar o Squash
Rollback Facilitado: Se a funcionalidade introduzir um erro, só precisa de reverter um único ID de commit.
Leitura do Histórico: O
git logdamastermostrará apenas funcionalidades completas, em vez de mensagens como "corrigindo erro" ou "ajuste de indentação".Foco no "O Quê": Na
master, importa o que foi entregue. O "como" (as tentativas e erros) fica guardado apenas na sua branch local enquanto trabalhava.
4. Quando NÃO utilizar o Squash
Preservação de Histórico Detalhado: Se o projeto exigir que cada micro-passo do desenvolvimento seja rastreável individualmente na
master(raro em grandes empresas).Branches de Longa Duração: Se estiver a partilhar a mesma branch com vários programadores e todos precisarem do histórico detalhado para colaborar.
Dica de Ouro: Após o Squash and Merge, a sua branch dev_charles torna-se obsoleta. É boa prática eliminá-la para manter o repositório limpo:
git branch -d dev_charles e git push origin --delete dev_charles.
5. Como realizar um Rollback (Reversão)
Esta é a maior vantagem do Squash. Se o código integrado causar problemas em produção, o rollback é imediato:
Via Interface (GitHub/GitLab):
Vá ao Pull Request que foi fechado.
Clique no botão "Revert" que aparece logo abaixo do status de "Merged".
Isto criará automaticamente um novo PR que desfaz todas as alterações daquela funcionalidade.
Via Linha de Comandos (CLI):
# 1. Obtenha o ID do commit de squash na master
git checkout master
git pull origin master
git log --oneline
# 2. Reverte o commit específico (isso cria um novo commit inverso)
git revert <ID_DO_COMMIT_SQUASH>
# 3. Envie a correção para o servidor
git push origin master
Dica de Ouro: Após o Squash and Merge, a sua branch dev_charles torna-se obsoleta. É boa prática eliminá-la para manter o repositório limpo:
git branch -d dev_charles e git push origin --delete dev_charles