Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA
LiçãoIntermediáriocódigo testado

Fluxo de trabalho com Git em time: branch, PR e main protegida

Como um time organiza branch, revisão e merge: main protegida, Conventional Commits e a escolha entre Git Flow, GitHub Flow e trunk-based.

Rodolfo Mori4 min de leitura

Um fluxo de Git é um acordo sobre onde nasce o trabalho, quem revisa, quais testes bloqueiam integração e como uma versão chega à produção. Branch e PR são ferramentas; proteção, tamanho das tarefas e responsabilidade fazem o sistema funcionar.

O sandbox modelou uma feature com dois commits:

bash
git --no-pager log --oneline -3
01add74 docs: explica busca af44833 feat: adiciona busca 13af6a3 docs: cria README

Combine regras antes do primeiro conflito

Defina branch principal, forma de atualizar, requisitos de PR, estratégia de merge, convenção de mensagem e resposta a emergência. Regra tácita funciona até duas pessoas assumirem coisas diferentes. Registre o acordo no README ou guia de contribuição.

Main protegida impede push direto, exige revisão e checks conforme a configuração do GitHub. Essa proteção não foi alterada nesta produção: depende de permissões de administrador. Localmente, o estado foi preparado para mostrar o histórico que cada política produziria.

Antes de qualquer integração, a lista de branches do sandbox mostrou quais nomes apontavam para o hotfix e quais preservavam alternativas de merge:

bash
git branch -vv | sed -n '1,6p'
fix/busca-vazia 7f58bd2 fix: evita busca sem termo main 13af6a3 docs: cria README * main-merge 7f58bd2 fix: evita busca sem termo main-squash 40ede01 feat: adiciona busca de livros

Essa inspeção local não prova proteção no GitHub; prova somente a posição das referências. Status de checks, aprovação e regras precisam ser consultados na plataforma por quem possui acesso.

Uma tarefa curta ganha uma branch curta

bash
git switch -c feat/busca
Switched to a new branch 'feat/busca'

Nome comunica intenção; descrição da issue comunica contexto. Branch curta reduz distância da main e superfície de conflito. “Curta” é tempo e escopo, não poucos caracteres. Uma tarefa de três semanas provavelmente precisa ser dividida ou integrar incrementos desativados por flag.

O ciclo diário tem observação entre comandos

Atualize referências, integre a base conforme política, trabalhe, teste, revise o stage, faça commit e envie:

bash
git status --short
git branch --show-current
git diff --cached --stat
main-merge

Status e diff ficaram sem saída; a única linha veio da branch atual. O hábito é mais importante: não faça pull, add e push numa cadeia que impede leitura entre estados. Cada pausa é uma chance de encontrar branch errada ou arquivo estranho.

Conventional Commits melhora leitura, não corrige escopo

feat, fix, docs, refactor, test e chore classificam intenção. O assunto usa imperativo e explica resultado. Um commit gigante chamado feat continua gigante; a convenção não substitui decomposição.

bash
git --no-pager log --oneline --all -6
7f58bd2 fix: evita busca sem termo 45e2bc6 merge: integra busca 01add74 docs: explica busca af44833 feat: adiciona busca 13af6a3 docs: cria README

Mensagens permitem gerar changelog como ponto de partida, ligar automações e encontrar decisões. Corpo do commit explica por que quando o assunto não basta.

Três fluxos servem a cadências diferentes

fluxo branches integração melhor encaixe
GitHub Flow uma branch curta por mudança PR frequente em main implantável produtos web e equipes pequenas
trunk-based main frequente, branches muito curtas integração contínua e flags times maduros com CI forte
Git Flow develop, release e hotfix duradouras releases planejadas versões suportadas em ciclos separados

Git Flow cobra merges e sincronização adicionais. Trunk-based cobra testes, flags e disciplina para integrar incompleto sem expor. GitHub Flow é simples, mas exige main sempre saudável. Escolha pelo ciclo de entrega, não pelo fluxo mais famoso.

O grafo de merge explícito do sandbox ficou:

bash
git --no-pager log --oneline --graph --decorate main-merge -5
* 45e2bc6 (main-merge) merge: integra busca |\ | * 01add74 docs: explica busca | * af44833 feat: adiciona busca |/ * 13af6a3 (main) docs: cria README

O squash da mesma feature reduziu a tarefa a um commit:

bash
git --no-pager log --oneline --graph --decorate main-squash -3
* 40ede01 (main-squash) feat: adiciona busca de livros * 13af6a3 (main) docs: cria README

Esses desenhos não elegem vencedor. O ciclo de pull request explica o efeito da escolha na revisão.

Duas pessoas no mesmo arquivo reduzem conflito com coordenação

Divida tarefas por resultado, mantenha branches atualizadas e avise mudanças estruturais cedo. Não tente “reservar” arquivos: módulos se relacionam. PRs pequenos diminuem o intervalo entre base e integração. Testes detectam conflito sem marcador, quando duas mudanças mesclam textualmente mas quebram regra.

Ao encontrar conflito, preserve intenções, não lados. “Aceitar o meu” apaga a contribuição sem avaliar. Leia commits e converse com a pessoa autora.

Hotfix encurta o caminho sem remover revisão

O sandbox abriu fix/busca-vazia, registrou uma correção e fez fast-forward:

bash
git switch -c fix/busca-vazia
# edite busca.js e execute git add busca.js
git commit -m "fix: evita busca sem termo"
git switch main-merge
git merge --ff-only fix/busca-vazia
[fix/busca-vazia 7f58bd2] fix: evita busca sem termo 1 file changed, 1 insertion(+), 1 deletion(-) Updating 45e2bc6..7f58bd2 Fast-forward busca.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

Em produção, hotfix ainda precisa teste, revisão proporcional e rastreabilidade. Urgência pode reduzir espera; não autoriza senha no código, force na main ou mudança sem responsável.

Checklist do primeiro dia

Confirme remote, branch principal, estratégia de pull, comandos de teste, responsáveis por revisão, padrão de mensagem, regra de segredo e processo de release. Faça uma alteração pequena para observar o ciclo inteiro. Perguntar antes evita aprender a política pelo erro do servidor.

Sua missão é simular GitHub Flow com bare local: feature curta, dois commits, revisão do diff e integração. Compare o grafo com squash e registre sua tabela de decisão. Depois conecte rebase, tags e README ao projeto final sem afirmar que proteção ou PR externo foram criados automaticamente.

  • git
  • github
  • time
  • workflow
  • conventional commits
  • git flow

Perguntas frequentes

Todo time precisa usar Git Flow?
Não. Git Flow adiciona branches duradouras e atende certos ciclos de release. Times com entrega contínua costumam preferir GitHub Flow ou trunk-based com branches curtas.

Dúvidas e comentários

Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.

Todo o código deste artigo foi executado em git version 2.54.0 (Apple Git-156) no macOS 27, e as saídas exibidas são as reais — como produzimos este conteúdo.

Fontes consultadas

  1. GitHub Docs — GitHub Flow — docs.github.com
  2. Git — Workflows — git-scm.com

Continue por aqui