Branching & Merging
Branches de funcionalidades, merge e estratégias de rebase para serviços Python que enviam pyproject.toml, lockfiles e migrações Alembic juntos.
Busque em todas as páginas da documentação
Branches de funcionalidades, merge e estratégias de rebase para serviços Python que enviam pyproject.toml, lockfiles e migrações Alembic juntos.
git checkout main && git pull --rebase origin main
git checkout -b feat/api-91-refunds
# trabalhe...
git fetch origin && git rebase origin/main
git push -u origin feat/api-91-refunds
# abra PR -> squash merge para main após CI verdeQuando usar isso:
mainmain mais recente antes da revisão do PRrelease/x.y com aplicativos Django/FastAPI# Ciclo de vida do branch de funcionalidade
git switch -c feat/worker-retries main
uv run pytest -q
git commit -am "feat(worker): retry smtp errors [WRK-12]"
git fetch origin
git rebase origin/main
# conflito em uv.lock -> regenere o lock após resolver pyproject
uv lock
git add pyproject.toml uv.lock
git rebase --continue
git push --force-with-lease origin feat/worker-retriesO que isso demonstra:
main atualizadomain.| Branch | Propósito |
|---|---|
main | Integração sempre enviável |
feat/* | Trabalho de ticket; rebasado frequentemente |
release/x.y | Estabilização; apenas correções |
hotfix/* | Patch de produção a partir de tag |
# Cherry-pick de correção de migração para o branch de release
git switch release/2.3
git cherry-pick abc1234 # commit com revisão Alembic
uv run alembic upgrade head
uv run pytest -qmain diariamente.git bisect. Correção: título de PR significativo se torna a mensagem de squash.main em release/* - Puxa funcionalidades não verificadas. Correção: apenas cherry-pick.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Trunk-based + flags | CI maduro e feature flags | Longos trains de release com migrações de schema |
GitFlow develop | Mandato de organização legado | Equipe prefere trunk + release/* |
| Commit de merge no PR | Preservar metadados de limite do PR | O ruído no histórico é uma preocupação |
| Rebase merge | Histórico linear com agrupamento de PR | Política proíbe qualquer reescrita |
Squash para PRs de funcionalidades em main; commit de merge quando for necessário preservar a narrativa de funcionalidades com múltiplos commits.
Aceite o pyproject.toml de um dos lados, execute uv lock, adicione o lock regenerado - nunca faça merge manual do lock JSON.
Meta de 1-3 dias; se for mais longo, divida o ticket ou integre atrás de uma feature flag.
Sim - habilite a exclusão automática no GitHub; localmente git branch -d após o merge.
Coordene a cadeia de revisão Alembic - o segundo PR se baseia no primeiro até que o primeiro seja mesclado.
Exija PR, ruff, pytest, revisões - sem push direto, exceto para papéis de "break-glass".
Mesmas regras por pasta de serviço; filtros de caminho na CI executam apenas projetos uv afetados.
Cherry-pick para main e release/* ativos; marque o patch após validação em staging.
Faça merge dos PRs do dependabot como estão ou rebase usando o botão do GitHub - mantenha o lockfile consistente com uv sync --frozen na CI.
Veja Git para Dados/Notebooks - nbstripout reduz o ruído.
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026