Ramificación y Fusión
Estrategias de ramas de características, fusión y rebase para servicios de Python que envían pyproject.toml, lockfiles y migraciones de Alembic juntos.
Busca en todas las páginas de la documentación
Estrategias de ramas de características, fusión y rebase para servicios de Python que envían pyproject.toml, lockfiles y migraciones de Alembic juntos.
git checkout main && git pull --rebase origin main
git checkout -b feat/api-91-refunds
# trabajar ...
git fetch origin && git rebase origin/main
git push -u origin feat/api-91-refunds
# abrir PR -> fusionar con squash a main después de que CI esté en verdeCuándo usar esto:
mainmain antes de la revisión de PRrelease/x.y con aplicaciones Django/FastAPI# Ciclo de vida de la rama de características
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
# conflicto en uv.lock -> regenerar lock después de resolver pyproject
uv lock
git add pyproject.toml uv.lock
git rebase --continue
git push --force-with-lease origin feat/worker-retriesLo que esto demuestra:
main actualizado--force-with-lease después de rebasemain.| Rama | Propósito |
|---|---|
main | Integración siempre lista para enviar |
feat/* | Trabajo de ticket; rebasado a menudo |
release/x.y | Estabilización; solo correcciones |
hotfix/* | Parche de producción desde etiqueta |
# Hacer cherry-pick de corrección de migración a la rama de lanzamiento
git switch release/2.3
git cherry-pick abc1234 # commit con revisión de Alembic
uv run alembic upgrade head
uv run pytest -qmain diariamente.main en release/* - Introduce características no verificadas. Solución: solo cherry-pick.| Alternativa | Usar Cuándo | No Usar Cuándo |
|---|---|---|
| Trunk-based + flags | CI madura y flags de características | Líneas de lanzamiento largas con migraciones de esquema |
GitFlow develop | Mandato de organización heredado | El equipo prefiere trunk + release/* |
| Commit de fusión en PR | Preservar metadatos de límite de PR | El ruido del historial es una preocupación |
| Fusión de rebase | Historial lineal con agrupación de PR | La política prohíbe cualquier reescritura |
Squash para PRs de características en main; commit de fusión cuando se requiere preservar la narrativa de características de múltiples commits.
Aceptar el pyproject.toml de un lado, ejecutar uv lock, preparar el lock regenerado - nunca fusionar manualmente el JSON del lock.
Apunta a 1-3 días; si es más largo, dividir el ticket o integrar detrás de un flag de característica.
Sí - habilitar auto-eliminación en GitHub; git branch -d local después de fusionar.
Coordinar la cadena de revisiones de Alembic - el segundo PR se basa en el primero hasta que el primero se fusione.
Requerir PR, ruff, pytest, revisiones - sin push directo excepto rol de emergencia.
Las mismas reglas por carpeta de servicio; los filtros de ruta en CI ejecutan solo los proyectos uv afectados.
Hacer cherry-pick a main y release/* activos; etiquetar el parche después de la validación en staging.
Fusionar PRs de dependabot tal cual o rebasar usando el botón de GitHub - mantener el lockfile consistente con uv sync --frozen CI.
Ver Git para Datos/Notebooks - nbstripout reduce el ruido.
Versiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 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+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026