Mejores prácticas de Git
Un resumen condensado de las 25 prácticas de Git más importantes para equipos de Python: historial limpio, commits revisables y hooks alineados con CI.
-
maines siempre la verdad de integración: Cada PR fusionado pasaruff,pytesty typecheck; nunca dejesmainroto durante la noche (Comandos Esenciales de Git). -
Confirma el archivo de bloqueo (lockfile):
uv.lock(opoetry.lock) es necesario parauv sync --frozenreproducible en CI; nunca lo ignores en.gitignore. -
IDs de tickets en cada commit:
feat(billing): tax line [BILL-42]- los cherry-picks arelease/*dependen de mensajes trazables. -
Fusiona (squash merge) las características a
main: Un ticket, un commit en la rama de integración cuando la política del equipo lo permite. -
Ramas de características de corta duración: Objetivo de 1-3 días; haz rebase de
maindiariamente para evitar conflictos de lockfile y Alembic. -
Crea
release/x.ypara "trenes" coordinados: API + worker + migración se envían juntos; las nuevas características aterrizan enmainhasta la etiqueta (tag). -
La rama de lanzamiento solo acepta correcciones de errores (bugfixes): Aplícalo con protección de rama durante las ventanas de congelación.
-
Haz cherry-pick a
release/*, nunca fusionesmainenrelease/*: Fusionar trae características no verificadas al candidato de lanzamiento. -
Etiqueta (tag) desde
release/*después de la aprobación en staging:v2.6.0activa el pipeline de lanzamiento; el mensaje de la etiqueta lista los desplegables. -
Fusiona
release/*de vuelta amaindespués del despliegue: Preserva el límite del "tren"; elimina la rama de lanzamiento cuando esté completa. -
Ramas de hotfix desde etiquetas de producción:
git checkout -b hotfix/2.5.1 v2.5.0- no desdemaincuando esta está adelantada a producción. -
Haz backport de cada hotfix: Haz cherry-pick del SHA de la corrección a
mainy abrerelease/*si aún está activa. -
Nunca hagas push forzado de ramas compartidas: El historial de
main,release/*,hotfix/*es evidencia de auditoría. -
pre-commit replica CI:
ruff check,ruff format,pytestrápido - los mismos comandos que GitHub Actions (Configuración de Git). -
La plantilla de PR requiere nota de migración: Las revisiones de Alembic necesitan un plan de reversión o una estrategia de expansión-contracción.
-
La protección de ramas requiere verificaciones de estado (status checks): La política supera el sistema de honor para flujos de trabajo requeridos.
-
Nunca confirmes
.envo secretos: Solo.env.example; producción a través de inyección de secretos de plataforma. -
No confirmes
.venv/,__pycache__/odist/: Los artefactos pertenecen a CI/CD, no a git. -
Commits convencionales para automatización de changelog: Empareja con
semantic-releaseo un script de changelog personalizado si se adopta. -
Creación de etiquetas restringida: Las etiquetas activan la producción - reglas o rol de gestor de lanzamientos.
-
Monorepo: documenta la estrategia de etiquetas: Una etiqueta de monorepo vs. etiquetas por servicio - elige una y documéntala.
-
Cambios de esquema de API + worker vinculados: La deriva del contrato de eventos rompe los flujos asíncronos - un PR o PRs explícitamente vinculados.
-
Revisa las diferencias del lockfile en los PR de dependencias: Las nuevas dependencias transitivas inesperadas son señales de alerta de la cadena de suministro.
-
Documenta la reversión en las notas de lanzamiento: Resúmenes de imágenes (image digests), plan de reversión de migración, interruptor de apagado (kill switch) de feature flag.
-
Rebase interactivo solo en
feat/*privadas:--force-with-leaseantes de la revisión del PR; nunca en ramas compartidas.
Preguntas Frecuentes
¿Rama develop de GitFlow o trunk + release?
La mayoría de los equipos de servicios de Python usan trunk + release/hotfix - más simple que un develop de larga duración a menos que la organización exija GitFlow.
¿Qué tan estricto con el formato del mensaje de commit?
Forzar el ID del ticket y el modo imperativo; tipo y alcance convencionales cuando la automatización del changelog depende de ello.
¿Política de fusión de PRs de Dependabot?
Fusionar automáticamente los incrementos de parche (patch bumps) cuando CI está en verde; menores/mayores necesitan revisión humana de la diferencia del lockfile.
¿Notebooks en git?
Sigue Git para Datos/Notebooks - nbstripout obligatorio.
Relacionado
- Estrategias de Ramificación y Fusión
- Lista de Verificación de Resolución de Conflictos de Fusión
- CLI de GitHub - automatización de PR
- Pipelines de CI/CD - puertas de flujo de trabajo
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+.