PureTools

Estrategias de Branching Git: Gitflow vs Trunk-Based vs GitHub Flow

PureTools Team· 9 min de lectura
Estrategias de Branching Git: Gitflow vs Trunk-Based vs GitHub Flow

Branching Git: No Hay Una Única Manera Correcta

Todos los equipos discuten sobre estrategias de branching en algún momento. La verdad es que no existe un mejor enfoque universal — depende del tamaño del equipo, cadencia de releases y modelo de deploy. Aquí están las tres estrategias más populares con trade-offs honestos.

GitHub Flow (Simple)

main ─────●─────●─────●─────●─────●─────
            \         /
             feature ●

Cómo funciona:

  1. Crea branch desde main
  2. Haz commits, push al remoto
  3. Abre un pull request
  4. Recibe code review
  5. Merge a main
  6. main siempre está deployable
git checkout -b feature/add-search
# ... trabaja, commitea, push ...
git push -u origin feature/add-search
# Abre PR en GitHub, recibe review, merge
ProsContras
Simplicísimo — una regla de branchSin separación entre "lanzado" y "en progreso"
Iteración rápidaRequiere madurez de CI/CD (deploy automático al merge)
Funciona genial para SaaS / web appsMás difícil para apps móviles con ciclos de release

Mejor para: Equipos pequeños, productos SaaS, deploy continuo.

Gitflow (Complejo)

main     ─────●───────────────●───────
              |               |       
release       |    ●────●     |       
              |   /      \    |       
develop ──●──●──●────●────●──●───●──
           \      /       \      /    
feature     ●───●          ●───●     

Cómo funciona:

  • main — solo releases de producción, taggeado con versiones
  • develop — branch de integración, siempre tiene las features más recientes
  • feature/* — branch desde develop, merge de vuelta a develop
  • release/* — branch desde develop cuando está listo para release, solo bug fixes
  • hotfix/* — branch desde main para fixes urgentes de producción
ProsContras
Clara separación de responsabilidadesDemasiadas branches y ceremonia
Gestión explícita de releasesConflictos de merge se acumulan en develop
Bueno para software versionadoLento — features esperan ventanas de release

Mejor para: Software empaquetado, apps móviles con releases en app store, equipos con etapas de QA.

Trunk-Based Development (Rápido)

main ──●──●──●──●──●──●──●──●──●──
        \  /   \  /
         ●      ●
      (branches cortas, < 1 día)

Cómo funciona:

  • Todos commitean en main (o branches muy cortas mergeadas el mismo día)
  • Feature flags ocultan trabajo incompleto
  • CI corre en cada commit
  • Releases son tags en main, o deploy continuo
# Branch de vida corta (mergeada en horas)
git checkout -b fix/typo-in-header
git commit -am "Fix typo in header component"
git push -u origin fix/typo-in-header
# PR creado, revisado, mergeado el mismo día

# O commitear directo en main (con protección CI)
git commit -am "Add search endpoint behind feature flag"
git push origin main
ProsContras
Loop de feedback más rápidoRequiere excelente CI/CD y testing
Sin infierno de mergeFeature flags agregan complejidad
Usado por Google, Meta, etc.Requiere disciplina del equipo

Mejor para: Equipos experimentados, deploy continuo, microservicios.

Comparación

FactorGitHub FlowGitflowTrunk-Based
ComplejidadBajaAltaBaja
Vida de la branchDíasDías a semanasHoras
Conflictos de mergeOcasionalesFrecuentesRaros
Modelo de releaseContinuoAgendadoContinuo
Madurez CI/CD necesariaMediaBajaAlta
Tamaño del equipo2-155-50+Cualquiera (con disciplina)

Consejos Prácticos

  • Mantén branches de vida corta. Cualquier branch abierta más de 3 días es un conflicto de merge esperando suceder.
  • Elimina branches después del merge. git branch -d feature/done y habilita auto-delete en GitHub.
  • Protege main. Exige PR reviews y CI pasando antes del merge.
  • Rebase antes de mergear para mantener historial limpio: git rebase main en tu feature branch.
  • Usa conventional commits para changelogs automatizados: feat:, fix:, chore:.

Referencia Git: Cheatsheet Git — todos los comandos git comunes, buscables y categorizados.