Una rama es una línea de desarrollo independiente. Permite trabajar en una funcionalidad nueva o en una corrección sin tocar el código estable que usan los demás.
Piensa en una rama como un borrador aparte. Puedes hacer todos los ensayos que quieras; mientras no hayas fusionado, el trabajo de los demás no se ve afectado.
Sin ramas, todo el equipo escribiría en el mismo archivo al mismo tiempo: caos garantizado. Con las ramas, cada uno avanza en su carril y luego se reúne el trabajo con limpieza.
Los comandos de base ya vistos en el módulo 01:
# Crear una rama y cambiar a ella
git switch -c feature/login
# Listar las ramas
git branch
# Volver a main
git switch main| Acción | Comando moderno | Sintaxis antigua |
|---|---|---|
| Crear + cambiar | git switch -c nom | git checkout -b nom |
| Cambiar | git switch nom | git checkout nom |
| Listar | git branch | git branch |
| Borrar | git branch -d nom | git branch -d nom |
🔧 Mini-ejercicio — Escribe el comando moderno para crear una rama feature/login y cambiar a ella de una sola vez.
git switch -c feature/login (equivalente a la sintaxis antigua git checkout -b feature/login).
En un equipo, no se crean ramas al azar: se les da un rol y un nombre convencional. Estos son los tipos más extendidos.
| Tipo de rama | Prefijo habitual | Rol | Duración de vida |
|---|---|---|---|
| Principal | main (o master) | Código en producción, siempre estable | Permanente |
| Integración | develop | Reúne las funcionalidades en curso | Permanente |
| Funcionalidad | feature/ | Desarrollar una funcionalidad nueva | Corta |
| Versión | release/ | Estabilizar antes de un paso a producción | Corta |
| Correctivo urgente | hotfix/ | Corregir un bug crítico en prod | Muy corta |
Ejemplos de nombres realistas:
feature/ajout-paiement-stripe
feature/dashboard-utilisateur
release/1.4.0
hotfix/correction-faille-loginUna buena convención de nombres es documentación gratuita: solo con el nombre de la rama, el equipo sabe de qué se trata.
🔧 Mini-ejercicio — Debes corregir de urgencia una falla de conexión en producción. ¿Qué prefijo de rama usas, y propone un nombre completo.
El prefijo hotfix/ (corrección urgente que parte de main). Ejemplo: hotfix/correction-faille-login.
Git Flow es una estrategia estructurada introducida por Vincent Driessen en 2010. Se apoya en dos ramas permanentes (main y develop) y tres tipos de ramas temporales (feature, release, hotfix).
El ciclo típico:
develop para crear una rama feature/*.feature se fusiona en develop.release/* para estabilizar.release se fusiona en main (y se etiqueta) y en develop.hotfix/* desde main, luego se fusiona en main y develop.# Empezar una funcionalidad (sin la extensión git-flow)
git switch develop
git switch -c feature/panier
# ... trabajo + commits ...
git switch develop
git merge feature/panier
git branch -d feature/panier| Ventajas | Inconvenientes |
|---|---|
| Muy estructurado, roles claros | Pesado, muchas ramas |
| Ideal para versiones planificadas | Poco adaptado al despliegue continuo |
| Separa con nitidez dev y prod | Fusiones complejas, riesgo de conflictos |
Git Flow brilla con software entregado por versiones (apps móviles, software instalado). Para un sitio web desplegado 10 veces al día, se convierte en un freno.
GitHub Flow es una estrategia simple y ligera, pensada para el despliegue continuo. Una sola rama permanente: main. Todo lo demás pasa por ramas feature cortas y pull requests.
Las reglas de oro:
main es siempre desplegable.main.main.main.git switch main
git pull
git switch -c feature/filtre-recherche
# ... commits ...
git push -u origin feature/filtre-recherche
# → abrir una Pull Request en GitHub| Ventajas | Inconvenientes |
|---|---|
| Simple, pocas ramas | Supone una buena cobertura de tests |
| Perfecto para la web / SaaS | Menos adaptado a varias versiones que hay que mantener |
| Favorece las entregas pequeñas y frecuentes | Exige disciplina sobre la calidad de main |
GitHub Flow es, con diferencia, el mejor punto de partida para un equipo moderno: suficiente estructura para colaborar, suficiente ligereza para ir rápido.
🔧 Mini-ejercicio — En GitHub Flow, escribe los dos comandos para partir de un main al día antes de crear tu rama de trabajo.
git switch main
git pullSolo después: git switch -c feature/....
El Trunk-Based Development (desarrollo sobre el tronco) lleva la simplicidad aún más lejos: todo el mundo integra su trabajo en una rama única (el trunk, es decir main) con mucha frecuencia — lo ideal es varias veces al día.
Principios clave:
# Ciclo ultracorto
git switch main
git pull
# pequeña modificación...
git commit -am "Añadir el botón export"
git push # integrado en el tronco unos minutos después| Ventajas | Inconvenientes |
|---|---|
| Integración continua de verdad | Exige una CI sólida y rápida |
| Evita los «merges del infierno» | Pide mucha disciplina |
| Práctica de equipos muy performantes (Google, etc.) | Feature flags que hay que gestionar |
El peor enemigo de los equipos Git son las ramas que viven semanas. Cuanto más tarde se integra, más dolorosa es la fusión. El trunk-based lo resuelve integrando pronto y a menudo.
🔧 Mini-ejercicio — En Trunk-Based, ¿cómo integras una funcionalidad no terminada sin bloquear a los demás ni crear una rama larga?
Se oculta el código inacabado detrás de un feature flag (bandera de funcionalidad): está integrado en el tronco pero desactivado para los usuarios.
No existe una estrategia universal: la buena elección depende del tipo de producto, de la madurez del equipo y de la frecuencia de despliegue.
| Criterio | Git Flow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| Ramas permanentes | 2 (main + develop) | 1 (main) | 1 (main) |
| Complejidad | Alta | Baja | Muy baja |
| Frecuencia de entrega | Por versiones | Continua | Muy continua |
| Duración de las ramas | Larga | Corta | Muy corta (< 1 día) |
| Tests automatizados exigidos | Deseables | Importantes | Imprescindibles |
| Caso ideal | Apps versionadas, móvil | Web / SaaS, equipo medio | Equipo maduro, CI fuerte |
Consejo: la mayoría de los equipos debería empezar por GitHub Flow. Ofrece el mejor compromiso simplicidad / seguridad. Se migra al trunk-based cuando la CI está madura, o a Git Flow solo si el producto impone versiones.
¿Para qué sirve principalmente una rama Git?
a) Para guardar el repositorio en la nube
b) Para trabajar de forma aislada sin afectar el código estable
c) Para comprimir los archivos
d) Para borrar el historial
✅ Respuesta: b) — Una rama es una línea de desarrollo independiente que aísla el trabajo hasta la fusión.
¿Cuántas ramas permanentes usa Git Flow?
a) Una sola (main)
b) Dos (main y develop)
c) Ninguna
d) Una por desarrollador
✅ Respuesta: b) — Git Flow se apoya en dos ramas permanentes: main (producción) y develop (integración).
¿Qué estrategia es la más adecuada para un sitio web desplegado varias veces al día?
a) Git Flow
b) GitHub Flow o Trunk-Based
c) Ninguna rama en absoluto
d) Una rama por año
✅ Respuesta: b) — GitHub Flow (y aún más el Trunk-Based) están pensados para el despliegue continuo. Git Flow sería demasiado pesado.
En el Trunk-Based Development, ¿cómo se oculta una funcionalidad no terminada?
a) En una rama larga de varias semanas
b) Con un feature flag (bandera de funcionalidad)
c) Borrando el código cada noche
d) No se puede, hay que terminar todo de un golpe
✅ Respuesta: b) — Los feature flags permiten integrar código inacabado sin activarlo para los usuarios, y evitan las ramas largas.
¿Qué prefijo de rama se usa para corregir un bug crítico directamente en producción?
a) feature/
b) release/
c) hotfix/
d) develop/
✅ Respuesta: c) — Una rama hotfix/ parte de main para corregir un bug urgente, luego se fusiona en main y develop.
main y develop.hotfix/ parte de main para un bug urgente en producción.Trabajas en un repositorio cuyo main es estable. Te piden añadir una página «Acerca de». Pon en práctica el GitHub Flow:
main al día.apropos.html.# 1. Partir de un main al día
git switch main
git pull origin main
# 2. Crear una rama descriptiva
git switch -c feature/page-apropos
# 3. Crear el archivo y luego hacer commit
echo "<h1>À propos</h1>" > apropos.html
git add apropos.html
git commit -m "Ajout de la page À propos"
# 4. Empujar la rama hacia el remoto
git push -u origin feature/page-apropos
# 5. Verificar las ramas
git branchResultado esperado:
| Etapa | Verificación |
|---|---|
| Rama creada | git branch muestra * feature/page-apropos |
| Commit presente | git log --oneline -1 muestra «Ajout de la page À propos» |
| Rama empujada | Git muestra * [new branch] feature/page-apropos -> feature/page-apropos |
| Seguimiento configurado | El -u enlaza la rama local con la rama remota |
* feature/page-apropos
mainSiguiente etapa lógica: abrir una pull request en GitHub para hacer releer y fusionar este trabajo — es exactamente el objeto de la lección 03.
main, develop, feature/, release/, hotfix/ — cada una con un rol.main + pull requests, perfecto para la web.Ahora que sabes organizar tus ramas, toca la lección 02 — Merge y rebase: cómo reunir esas ramas con limpieza y resolver los conflictos.
Todos los derechos reservados. Toda reproducción, difusión, uso o adaptación de este curso, en todo o en parte, está estrictamente prohibida sin la autorización escrita previa del Dr. Haythem REHOUMA.
Curso creado por Dr. Haythem REHOUMA — Desarrollo y despliegue de soluciones de datos