Pular para o conteúdo principal

Fluxo de Rebase para Atualização de Branches


Fluxo de Rebase para Atualização de Branches 

Este guia detalha o fluxo de trabalho mais comum e direto para manter uma feature branch atualizada com a branch principal (master ou main), garantindo um histórico de commits linear e limpo.

⚠️ REGRA DE OURO: NUNCA utilize o rebase em branches públicas ou partilhadas com outros programadores.

1. A Sequência de Comandos

Este é o método mais eficiente, pois combina a descarga de dados e a reaplicação dos commits num único passo.

# 1. Mudar para a sua branch de trabalho
git checkout dev_charles 

# 2. Atualizar a sua branch com a base da master (Atalho simplificado)
git pull --rebase origin master

# 3. Atualizar o servidor com o novo histórico (requer força)
git push origin dev_charles --force-with-lease

2. O que acontece em cada etapa?

git checkout dev_charles

Garante que está posicionado na branch correta onde o trabalho está a ser desenvolvido.

git pull --rebase origin master

Este é o comando principal e o mais utilizado no dia-a-dia. Ele faz duas coisas automaticamente:

  1. Fetch: Procura as novas atualizações da master no servidor.

  2. Rebase: Retira temporariamente os seus commits, aplica as novidades da master e volta a colocar os seus commits por cima.

Resultado: O seu histórico fica como se tivesse começado a trabalhar hoje, já com a versão mais recente do projeto.

git push origin dev_charles --force-with-lease

Como o rebase altera a identidade dos seus commits, o servidor remoto não aceitaria um envio comum. O --force-with-lease é a opção recomendada por ser mais segura que o -f tradicional, garantindo que não sobrescreve trabalho alheio por acidente.

3. Integração na Master (O "Merge Final")

Após o rebase e o push para a sua branch, o passo final é integrar o trabalho na master. Como a sua branch já está nivelada com a master, o Git realizará um Fast-forward merge.

# 1. Mudar para a master
git checkout master

# 2. Sincronizar a master local
git pull origin master

# 3. Fundir a sua branch (limpo e sem conflitos)
git merge dev_charles

# 4. Enviar o trabalho final para o servidor
git push origin master

4. Quando utilizar este fluxo?

  1. Antes de integrar o código: Para garantir que não existem conflitos com a versão atual do projeto.

  2. Histórico Linear: Para evitar o aparecimento de "Merge Commits" (mensagens automáticas de fusão) que poluem o log.

  3. Organização: Facilita a leitura do histórico por outros membros da equipa.

5. Segurança (A Regra de Ouro)

NUNCA faça rebase em branches partilhadas. Se alterar o histórico de uma branch onde outros colegas estão a trabalhar (como a própria master), causará erros graves de sincronização para todos. Use-o apenas em branches que são exclusivamente suas.

6. Como realizar um Rollback (Reversão)

Se o código integrado causar problemas, a reversão é simples através do ID do commit:

# 1. Identifique o commit na master
git checkout master
git pull origin master
git log --oneline

# 2. Reverte o commit (cria um commit inverso)
git revert <ID_DO_COMMIT>

# 3. Envie a correção
git push origin master

Resumo: O uso do pull --rebase é a forma mais ágil de manter o projeto organizado e pronto para integraçã

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