Ramas y estrategias de ramificación

10 min

Tabla de contenidos


1 — ¿Por qué ramas?

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:

bash
# Crear una rama y cambiar a ella
git switch -c feature/login

# Listar las ramas
git branch

# Volver a main
git switch main
AcciónComando modernoSintaxis antigua
Crear + cambiargit switch -c nomgit checkout -b nom
Cambiargit switch nomgit checkout nom
Listargit branchgit branch
Borrargit branch -d nomgit branch -d nom

🔧 Mini-ejercicio — Escribe el comando moderno para crear una rama feature/login y cambiar a ella de una sola vez.

✅ Ver una solución

git switch -c feature/login (equivalente a la sintaxis antigua git checkout -b feature/login).

↑ Volver arriba


2 — Los tipos de ramas

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 ramaPrefijo habitualRolDuración de vida
Principalmain (o master)Código en producción, siempre establePermanente
IntegracióndevelopReúne las funcionalidades en cursoPermanente
Funcionalidadfeature/Desarrollar una funcionalidad nuevaCorta
Versiónrelease/Estabilizar antes de un paso a producciónCorta
Correctivo urgentehotfix/Corregir un bug crítico en prodMuy corta

Ejemplos de nombres realistas:

bash
feature/ajout-paiement-stripe
feature/dashboard-utilisateur
release/1.4.0
hotfix/correction-faille-login

Una 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.

✅ Ver una solución

El prefijo hotfix/ (corrección urgente que parte de main). Ejemplo: hotfix/correction-faille-login.

↑ Volver arriba


3 — Git Flow

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:

  1. Se parte de develop para crear una rama feature/*.
  2. Una vez terminada, la feature se fusiona en develop.
  3. Cuando hay suficientes funcionalidades listas, se crea una release/* para estabilizar.
  4. La release se fusiona en main (y se etiqueta) y en develop.
  5. ¿Un bug crítico en prod? Se crea un hotfix/* desde main, luego se fusiona en main y develop.
bash
# 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
VentajasInconvenientes
Muy estructurado, roles clarosPesado, muchas ramas
Ideal para versiones planificadasPoco adaptado al despliegue continuo
Separa con nitidez dev y prodFusiones 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.

↑ Volver arriba


4 — GitHub Flow

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:

  1. main es siempre desplegable.
  2. Para cualquier trabajo, se crea una rama descriptiva desde main.
  3. Se hace commit con regularidad y se abre una pull request (vista en la lección 03).
  4. Tras la revisión y los tests en verde, se fusiona en main.
  5. Se despliega de inmediato main.
bash
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
VentajasInconvenientes
Simple, pocas ramasSupone una buena cobertura de tests
Perfecto para la web / SaaSMenos adaptado a varias versiones que hay que mantener
Favorece las entregas pequeñas y frecuentesExige 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.

✅ Ver una solución
bash
git switch main
git pull

Solo después: git switch -c feature/....

↑ Volver arriba


5 — Trunk-Based Development

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:

  • Las ramas de funcionalidad son minúsculas y viven menos de un día.
  • Las funcionalidades no terminadas se ocultan detrás de feature flags (banderas) en lugar de vivir en ramas largas.
  • La integración continua (CI) es obligatoria: cada commit dispara build + tests.
bash
# 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
VentajasInconvenientes
Integración continua de verdadExige 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?

✅ Ver una solución

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.

↑ Volver arriba


6 — Comparar y elegir su estrategia

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.

CriterioGit FlowGitHub FlowTrunk-Based
Ramas permanentes2 (main + develop)1 (main)1 (main)
ComplejidadAltaBajaMuy baja
Frecuencia de entregaPor versionesContinuaMuy continua
Duración de las ramasLargaCortaMuy corta (< 1 día)
Tests automatizados exigidosDeseablesImportantesImprescindibles
Caso idealApps versionadas, móvilWeb / SaaS, equipo medioEquipo 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.

↑ Volver arriba


7 — Quiz — Las estrategias de ramificación

Question 1

¿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

💡 Ver la solución

Respuesta: b) — Una rama es una línea de desarrollo independiente que aísla el trabajo hasta la fusión.


Question 2

¿Cuántas ramas permanentes usa Git Flow?

a) Una sola (main)

b) Dos (main y develop)

c) Ninguna

d) Una por desarrollador

💡 Ver la solución

Respuesta: b) — Git Flow se apoya en dos ramas permanentes: main (producción) y develop (integración).


Question 3

¿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

💡 Ver la solución

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.


Question 4

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

💡 Ver la solución

Respuesta: b) — Los feature flags permiten integrar código inacabado sin activarlo para los usuarios, y evitan las ramas largas.


Question 5

¿Qué prefijo de rama se usa para corregir un bug crítico directamente en producción?

a) feature/

b) release/

c) hotfix/

d) develop/

💡 Ver la solución

Respuesta: c) — Una rama hotfix/ parte de main para corregir un bug urgente, luego se fusiona en main y develop.

Corrigé

  1. b — Una rama aísla el trabajo hasta la fusión, sin tocar el código estable.
  2. b — Git Flow usa dos ramas permanentes: main y develop.
  3. b — GitHub Flow y Trunk-Based encajan con el despliegue continuo; Git Flow es demasiado pesado.
  4. b — Un feature flag oculta el código inacabado ya integrado en el tronco.
  5. c — hotfix/ parte de main para un bug urgente en producción.

↑ Volver arriba


8 — Práctica — Poner en marcha GitHub Flow

Consigna

Trabajas en un repositorio cuyo main es estable. Te piden añadir una página «Acerca de». Pon en práctica el GitHub Flow:

  1. Parte de un main al día.
  2. Crea una rama de funcionalidad bien nombrada.
  3. Haz un commit que añada el archivo apropos.html.
  4. Empuja la rama hacia el repositorio remoto para preparar una pull request.
  5. Lista tus ramas para verificar.

Corrección

bash
# 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 branch

Resultado esperado:

EtapaVerificación
Rama creadagit branch muestra * feature/page-apropos
Commit presentegit log --oneline -1 muestra «Ajout de la page À propos»
Rama empujadaGit muestra * [new branch] feature/page-apropos -> feature/page-apropos
Seguimiento configuradoEl -u enlaza la rama local con la rama remota
text
* feature/page-apropos
  main

Siguiente 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.

↑ Volver arriba


9 — Síntesis

Puntos a recordar

  1. Una rama aísla el trabajo sin afectar el código estable.
  2. Tipos de ramas: main, develop, feature/, release/, hotfix/ — cada una con un rol.
  3. Git Flow: estructurado, dos ramas permanentes, ideal para las versiones planificadas.
  4. GitHub Flow: simple, una rama main + pull requests, perfecto para la web.
  5. Trunk-Based: integración muy frecuente sobre el tronco, exige una CI sólida.
  6. La elección depende del producto, del equipo y de la frecuencia de despliegue.

A continuación

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.

↑ Volver arriba


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