Modelo de branching para Git propuesto por Vincent Driessen en 2010. Define ramas con roles fijos (main, develop, feature, release, hotfix) para gestionar releases estructurados.
GitFlow es un modelo de branching que asigna roles específicos a las ramas y define cómo y cuándo interactúan. Fue propuesto por Vincent Driessen en 2010 y se convirtió en el estándar para equipos con releases programados.
main — siempre refleja el código en producción. Cada commit es un release.develop — rama de integración. Aquí se acumulan features terminados para el próximo release.feature/* — una por feature, nace de develop, se mergea de vuelta a developrelease/* — preparación del release, nace de develop, se mergea a main y develophotfix/* — corrección urgente en producción, nace de main, se mergea a main y developmain: ──●──────────────────●──────────●──
\ / \ / \
release: \ ──●──● \ / \
\ / \ / \
develop: ──●────●────●────●───●───●──●───●───●──
\ / \ /
feature: ●──●──● ●──●──●
# 1. Iniciar un feature
git checkout develop
git checkout -b feature/user-auth
# ... trabajar, hacer commits ...
git commit -m "feat: add login form"
git commit -m "feat: add JWT validation"
# 2. Terminar el feature
git checkout develop
git merge --no-ff feature/user-auth
git branch -d feature/user-auth
# 3. Preparar release
git checkout develop
git checkout -b release/1.2.0
# ... solo bug fixes y preparación ...
git commit -m "fix: typo in login page"
git commit -m "chore: bump version to 1.2.0"
# 4. Publicar release
git checkout main
git merge --no-ff release/1.2.0
git tag -a v1.2.0 -m "Release 1.2.0"
git checkout develop
git merge --no-ff release/1.2.0
git branch -d release/1.2.0
# 5. Hotfix urgente
git checkout main
git checkout -b hotfix/1.2.1
git commit -m "fix: critical security vulnerability"
git checkout main
git merge --no-ff hotfix/1.2.1
git tag -a v1.2.1 -m "Hotfix 1.2.1"
git checkout develop
git merge --no-ff hotfix/1.2.1
git branch -d hotfix/1.2.1Buena opción cuando:
Evitar cuando:
Modelo simplificado: solo main + feature branches. Ideal para continuous deployment.
main: ──●────●────●────●──
\ / \ /
feature: ● ●
mainmainTodos trabajan en main (o ramas de vida muy corta). Requiere feature flags y CI robusto.
main: ──●──●──●──●──●──●──●──
main o ramas que viven < 1 díamain directamente| Aspecto | GitFlow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| Complejidad | Alta | Baja | Baja |
| Ramas permanentes | 2 (main, develop) | 1 (main) | 1 (main) |
| Releases | Programados | Continuos | Continuos |
| Ideal para | Enterprise, versioned software | SaaS, web apps | Equipos maduros con CI fuerte |
| Overhead | Alto | Bajo | Mínimo |
# git-flow CLI (extensión oficial)
brew install git-flow-avh
# Inicializar en un repo
git flow init
# Usar comandos simplificados
git flow feature start user-auth
git flow feature finish user-auth
git flow release start 1.2.0
git flow release finish 1.2.0
git flow hotfix start 1.2.1
git flow hotfix finish 1.2.1Entender GitFlow sigue siendo relevante porque muchos equipos lo usan y porque sus limitaciones enseñan por qué la industria migró hacia modelos más simples. Saber cuándo GitFlow es apropiado — y cuándo no — es una decisión arquitectónica que afecta la velocidad de entrega de todo el equipo.
Sistema de control de versiones distribuido creado por Linus Torvalds en 2005. Fundamento de todo flujo de desarrollo moderno — desde commits locales hasta colaboración global.
Plataforma de desarrollo colaborativo construida sobre Git. Más que hosting de repositorios — es el hub central para code review, CI/CD, gestión de proyectos y colaboración open source.
Modelo de branching minimalista diseñado para continuous deployment. Solo dos elementos — main y feature branches — con PRs como punto de integración y deploy inmediato tras merge.