lección 7
Gitflow simplificado: el flujo que usan los equipos reales
Main + feature branches. El flujo mínimo viable para que un equipo de datos trabaje sin caos y con orden.
⏱ 50 min
Ya tienes todas las piezas: branches, merge, GitHub, PRs, conflictos. Ahora la pregunta es: ¿cómo se organiza todo esto en un equipo real? Porque sin un acuerdo de equipo, cada uno usa branches como quiere y el repo se convierte en un plato de espaguetis. Necesitas un "flujo" — un conjunto de reglas simples que todos siguen. El flujo que vamos a aprender es el mínimo viable para equipos de datos: simple, efectivo y sin burocracia innecesaria.
Existe un modelo llamado "Gitflow" (creado por Vincent Driessen en 2010) que propone branches como develop, release, hotfix, feature... Es completo pero DEMASIADO complejo para equipos pequeños o medianos. He visto equipos de 5 personas paralizados por seguir Gitflow al pie de la letra. Mi filosofía: empieza con lo mínimo que funcione y añade complejidad solo cuando la necesites. Para el 90% de equipos de datos, main + feature branches es todo lo que necesitas.
### El flujo mínimo viable: main + feature branches
El flujo más simple que funciona profesionalmente tiene estas reglas:
- 01.main es sagrado: siempre funciona, siempre es deployable, nadie commitea directamente
- 02.Cada tarea = una feature branch: por pequeña que sea, trabaja en una branch
- 03.Nombres descriptivos: feature/, fix/, refactor/, docs/ + nombre claro
- 04.Push frecuente: sube tu branch a GitHub al menos una vez al día (backup + visibilidad)
- 05.PR obligatorio: todo cambio pasa por un Pull Request con al menos 1 revisión
- 06.Merge via PR: nunca git merge local para meter cosas en main — siempre vía GitHub
- 07.Borrar branch después del merge: no acumules branches muertas
### Un día típico con este flujo
Veamos cómo es un día de trabajo real usando este flujo. Imagina que eres ingeniero de datos en una fintech:
1# 09:00 - Llegas y actualizas main2git switch main3git pull45# 09:05 - Tu tarea de hoy: añadir validación de transacciones6git switch -c feature/validar-transacciones78# 09:05 - 12:00 - Trabajas, haces varios commits9git add .10git commit -m "feat: función validar_monto()"11# ... más trabajo ...12git add .13git commit -m "feat: función validar_fecha()"14# ... más trabajo ...15git add .16git commit -m "test: tests para validación de transacciones"1718# 12:00 - Subes tu progreso (backup + visibilidad)19git push -u origin feature/validar-transacciones2021# 14:00 - Terminas. Actualizas con main por si acaso.22git switch main23git pull24git switch feature/validar-transacciones25git merge main # Resolver conflictos si los hay2627# 14:10 - Creas el PR28gh pr create --title "feat: validación de transacciones" \29 --body "Añade validar_monto() y validar_fecha()..."3031# 14:15 - Tu compañera María revisa, deja un comentario32# Tú arreglas lo que pide:33git add .34git commit -m "refactor: renombrar según feedback de María"35git push3637# 15:00 - María aprueba, tú mergeas desde GitHub38# 15:01 - Borras la branch (GitHub te lo ofrece auto)3940# 15:05 - Siguiente tarea...41git switch main42git pull # Trae tu merge43git switch -c feature/siguiente-tarea
Un día de trabajo con el flujo profesional
### Gitflow completo vs simplificado: cuándo complicarse
El Gitflow original de Vincent Driessen tiene más branches:
- main: código en producción
- develop: integración de features antes de release
- feature/*: funcionalidades nuevas (salen de develop)
- release/*: preparar una versión para producción
- hotfix/*: fixes urgentes en producción
¿Cuándo necesitas este nivel de complejidad? Casi nunca en equipos de datos. Gitflow completo tiene sentido cuando: envías software empaquetado (como una app móvil con versiones), tienes un ciclo de releases planificado (v1.2, v1.3...), o tienes un equipo de QA que prueba releases antes del deploy. Para pipelines de datos, APIs internas o scripts de procesamiento, el flujo simplificado (main + feature branches + PRs) es todo lo que necesitas.
Regla del pragmatismo: si tu equipo tiene menos de 10 personas y no envía software con versiones a clientes externos, NO uses Gitflow completo. Es burocracia innecesaria. Main + feature branches + CI/CD es el estándar moderno para el 90% de equipos de tecnología.
### Commit messages: el arte ignorado
Un buen flujo de Git también incluye buenos mensajes de commit. Si tus commits dicen "cambios", "fix", "wip", "asdf", tu historial es inútil. Cuando dentro de 3 meses necesites encontrar "ese commit donde cambiamos la lógica de descuentos", un buen mensaje te salva horas de investigación.
El estándar más usado es Conventional Commits. Es simple: un prefijo que dice qué tipo de cambio es, seguido de una descripción:
1# Conventional Commits:2# tipo: descripción breve34git commit -m "feat: añadir validación de emails"5git commit -m "fix: manejar NULL en campo precio"6git commit -m "refactor: simplificar función de limpieza"7git commit -m "docs: documentar proceso de deploy"8git commit -m "test: añadir tests para módulo de exportación"9git commit -m "chore: actualizar dependencias"1011# Tipos comunes:12# feat = funcionalidad nueva13# fix = corrección de bug14# refactor = cambio interno sin cambiar funcionalidad15# docs = documentación16# test = añadir o modificar tests17# chore = tareas de mantenimiento
Conventional Commits: mensajes claros y buscables
### .gitignore: lo que nunca debe subir a GitHub
Todo flujo profesional necesita un buen .gitignore. Hay archivos que NUNCA deben subir al repo: credenciales, datos sensibles, archivos generados, cosas enormes. Un .gitignore para proyectos de datos en Python:
1# .gitignore para proyectos de datos23# Entornos virtuales4venv/5.venv/6env/78# Variables de entorno (¡NUNCA subir credenciales!)9.env10.env.local11*.secret1213# Datos (los datos no van en Git)14data/15*.csv16*.parquet17*.xlsx18!data/.gitkeep1920# Python21__pycache__/22*.pyc23*.pyo24.pytest_cache/2526# Notebooks27.ipynb_checkpoints/2829# IDE30.vscode/31.idea/3233# OS34.DS_Store35Thumbs.db
.gitignore típico para proyectos de ingeniería de datos
PELIGRO REAL: si commiteas un archivo .env con contraseñas de bases de datos o API keys y lo subes a un repo público, asume que esas credenciales están comprometidas. Los bots escanean GitHub 24/7 buscando secretos. Aunque borres el commit después, queda en el historial. Regla absoluta: secretos NUNCA en Git. Usa variables de entorno.
¿Cómo comprobar que tu .gitignore funciona? git check-ignore -v fichero te dice qué línea exacta del .gitignore lo está bloqueando. Si no sale nada, Git lo ve y lo subirá. Es la diferencia entre "he escrito un .gitignore" y "he comprobado que ignora lo que creo".
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...