Pular para o conteúdo principal

Como Fazer Squash and Merge

 

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:

  1. Abra o seu Pull Request (PR).

  2. Navegue até ao fundo da página, na secção de "Merge".

  3. Não clique diretamente no botão verde. Clique na seta para baixo ao lado do botão.

  4. Selecione a opção "Squash and merge".

  5. Clique no botão que agora diz "Squash and merge".

  6. 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 log da master mostrará 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):

  1. Vá ao Pull Request que foi fechado.

  2. Clique no botão "Revert" que aparece logo abaixo do status de "Merged".

  3. 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

Postagens mais visitadas deste blog

Recursividade Minha Linda! Estrutura Produtos Protheus SG1

Fato! Depois que você conhece recursividade em sua vida tudo fica mais leve (rss... ) a recursividade pode ser infinita (pode não ta!) se for infinita vai dar problema, não pode. Mas a recursividade nos ajuda a deixar nosso sistema mais flexível e dinâmico para montar uma série de regras de negócio. Hoje vou falar exatamente da SG1, tabela TOTVS Microsiga Protheus que é utilizada para montar a estrutura de um produto dentro PCP (Planejamento e Controle de Produção). Isso séria algo que a recursividade iria ajudar. Na SG1 temos o campos G1_COD (Pai) e G1_COMP (Filho). G1_COD->G1_COMP->G1_COD->G1_COMP->G1_COD->G1_COMP Seria assim o fluxo da informação. Sem mais delongas, abaixo vou deixar o script para MSSQL para apresentar esses dados. Inté! WITH ESTRUT( CODIGO, COD_PAI, COD_COMP, QTD, PERDA, DT_INI, DT_FIM ,TRT ,RECNO, NIVEL ) AS ( SELECT G1_COD PAI, G1_COD, G1_COMP, G1_QUANT, G1_PERDA, G1_INI, G1_FIM,G1_TRT,SG1.R_E_C_N_O_, 1 AS NIVEL FR...

REST Protheus Converter charset CP1252 para UTF8 com Header Accept UTF-8

O Protheus possui um tag que pode ser utilizada para conversão para UTF8 de forma transparente, basta enviar no header da requisição a TAG ACCEPT com charset=UTF-8, também pode-se adicionar o appllication/json. Accept : application/json; charset=UTF-8 ou Accept : charset=UTF-8 Isso ajuda pois não precisa mais utilizar as funções DecodeUTF8 e EncodeUT8 pois o próprio rest já vai fazer isso.

Cadastro de funções ADVPL

FWDirRemove( cDir, nType, lComplete, lKillFiles ) Função para remover diretórios, com a vantagem de remover somente o ultimo nível ou todo o caminho. cDir                   Diretório a ser removido lComplete          Remove todo o caminho (.T.) ou apenas o ultimo nível (.F.) lKillFiles             Remove os arquivos antes de tentar remover o diretório FWMakeDir( cDir, lShowMsg ) Função para criar diretório com seus subdiretórios, com a vantagem de criar todo o caminho. cDir                    Diretório a ser criado lShowMsg          Exibe ou não mensagem caso não consiga criar o diretório FwNoAccent( cString ) Retira acentos de uma string cString ...