# 1) ¿Qué es Git Flow?
Es un modelo de ramas que organiza el desarrollo en:
• main (o master): producción estable
• develop: integración de desarrollo
• Ramas de soporte:
• feature/*: nuevas funcionalidades
• release/*: preparación de versiones
• hotfix/*: parches urgentes en producción
• (opcional) support/*: mantenimiento de líneas antiguas
----
# 2) Inicialización en un repo existente
Dentro del repositorio:
``` Bash
git fetch
git pull
```
Tras tener el repositorio actualizado
```
git checkout -b develop
git flow init
```
Responde al asistente:
• Production branch: usa main.
• Development branch: develop
• Prefijos (recomendado por defecto):
• Feature: feature/
• Release: release/
• Hotfix: hotfix/
• Support: support/
✅ Se debe utilizar la configuracion por defecto
⸻
# 3) Flujo de trabajo habitual
## A. Features (nuevas funcionalidades)
### Crear y cambiar a una feature desde develop
Es importante tener tanto la rama `main` como la rama `develop` actualizada
```
git fetch
git checkout main
git pull --rebase origin main
git checkout develop
git pull --rebase origin develop
```
Una vez actualizado tanto `main` como `develop` se crea el feature
```
git flow feature start <Codigo de Ticket>-<Nombre descriptivo corto>
```
### Trabaja, comitea y sube avances
```
git add .
git commit -m "feat: agrega X"
git push -u origin feature/<Nombre redactado anteriormente>
```
El flujo de trabajo con add, commit y push es un flujo normal
### Crear pullrequest
- Ingresar github crear Pull Request
- Esperar a tener 2 reviews aprobadas del equipo de developer
### Finalizar (merge a develop y borrar rama)
```
git flow feature finish <Nombre de la rama sin prefijo>
```
### Push a develop
```
git push origin develop
```
## B. Release (preparar una versión)
### Rama de estabilización desde develop
```
git flow release start <Version correspondiente>
```
### Ajusta versionado, CHANGELOG, últimos fixes menores
```
git commit -am "chore(release): prepara <VersionCorrespondiente>"
```
### Finalizar: merge a main y a develop + tag
```
git flow release finish 1.2.0
```
### Sube cambios y tags
```
git push origin main develop --follow-tags
```
## C. Hotfix (parche urgente en producción)
### Rama desde main para corregir bug crítico
```
git flow hotfix start <Nombre del fix>
```
### Aplica fix
```
git commit -am "fix: corrige bug crítico"
```
### Finalizar: merge a main y develop + tag
```
git flow hotfix finish 1.2.1
```
### Sube a remoto
```
git push origin main develop --follow-tags
```
⸻
# 4) Nombres de ramas (convenciones)
• feature/nombre-corto-descriptivo
• release/1.2.0
• hotfix/1.2.1
Usa kebab-case en features, y semver en releases/hotfixes (MAJOR.MINOR.PATCH).
⸻
# 5) Buenas prácticas
• Pull requests: incluso con Git Flow, abre PRs para revisión en `feature/*`, `release/*` y `hotfix/*`.
• Versionado: sigue SemVer (1.2.3); Release = MINOR/MAJOR, Hotfix = PATCH.
• Tags: prefijo v (1.2.0) para uniformidad.
⸻
# 6) Cheat Sheet (comandos clave)
## Inicializar
```
git flow init
```
## Features
```
git flow feature start <name>
git flow feature publish <name>
git flow feature track <name>
git flow feature finish <name>
```
## Releases
```
git flow release start <version>
git flow release finish <version>
```
## Hotfix
```
git flow hotfix start <version>
git flow hotfix finish <version>
```