Logo AndercDev
Volver al blog
git branching

Git no es el problema: la estrategia de branching sí

Si alguna vez has sentido que Git es complicado, frustrante o innecesariamente caótico, déjame decirte algo importante: Git no es el problema. La mayoría de los conflictos, merges eternos y repositorios imposibles de mantener no pasan porque Git sea difícil, sino porque la estrategia de branching está mal pensada o mal aplicada. En este artículo vamos a hablar de por qué las estrategias de branching importan, cuáles son las más comunes y, sobre todo, cómo elegir la correcta según el contexto de tu equipo y tu proyecto.

Anderson CastañoAnderson Castaño
29 de diciembre de 20255 min de lectura
gitgit branchingFeature branches Git FlowTrunk-based

El verdadero origen del caos en Git

En muchos equipos, Git termina siendo visto como el enemigo: conflictos constantes, ramas que viven semanas sin integrarse, hotfixes urgentes que rompen releases y repositorios donde nadie sabe cuál rama usar.

Pero cuando analizas estos problemas, casi siempre tienen algo en común:

  • No hay reglas claras sobre cuándo crear ramas

  • No está definido cuándo ni cómo se hace merge

  • Las ramas viven demasiado tiempo

  • Se copia una estrategia “popular” sin entender por qué funciona

Git solo hace lo que le pedimos. El problema es cómo organizamos el trabajo alrededor de él.


¿Qué es una estrategia de branching?

Una estrategia de branching define cómo y cuándo se crean ramas, qué representa cada rama, y cómo se integran los cambios al código principal.

No es solo una decisión técnica, es una decisión de flujo de trabajo, y afecta directamente:

  • La velocidad de desarrollo

  • La calidad del código

  • La frecuencia de despliegues

  • La cantidad de conflictos

  • La salud del repositorio

Por eso no existe una estrategia universal que funcione para todos.


Feature Branches: separar para proteger

Una de las estrategias más comunes es trabajar con feature branches.

La idea es simple: cada cambio, funcionalidad o mejora vive en su propia rama, separada de la rama principal.

¿Cómo funciona?

  • Existe una rama principal (main o develop)

  • Por cada nueva funcionalidad se crea una rama (feature/login, feature/payments)

  • Cuando la funcionalidad está lista, se hace merge

Ventajas

  • Aísla los cambios

  • Facilita el code review

  • Reduce el riesgo de romper la rama principal

  • Funciona bien con equipos pequeños o medianos

Riesgos comunes

  • Ramas que viven demasiado tiempo

  • Conflictos grandes al final

  • Integraciones dolorosas si no se hace merge frecuente

👉 Clave: si usas feature branches, integra cambios seguido. Una rama vieja es una bomba de tiempo.


Git Flow: estructura y reglas claras

Git Flow es una estrategia más estructurada, pensada para proyectos con ciclos de release bien definidos.

Ramas típicas en Git Flow

  • main: código en producción

  • develop: integración de funcionalidades

  • feature/*: nuevas funcionalidades

  • release/*: preparación de versiones

  • hotfix/*: correcciones urgentes en producción

Ventajas

  • Flujo claro y predecible

  • Ideal para equipos grandes

  • Buen control de versiones y releases

Desventajas

  • Muchas ramas y reglas

  • Más fricción para cambios pequeños

  • Puede volverse pesada si se despliega frecuentemente

Git Flow no es malo, pero tampoco es ligero. Funciona mejor cuando los releases son planificados y no diarios.


Trunk-Based Development: integrar rápido o fallar rápido

En el otro extremo está trunk-based development.

Aquí la filosofía es clara: los cambios deben ser pequeños, frecuentes y rápidamente integrados al trunk (main).

¿Cómo funciona?

  • Una sola rama principal

  • Cambios pequeños

  • Integraciones constantes

  • Feature flags para funcionalidades incompletas

  • Mucha automatización y tests

Ventajas

  • Menos conflictos

  • Integración continua real

  • Despliegues frecuentes

  • Feedback rápido

Requisitos importantes

  • Buen set de tests automatizados

  • CI/CD confiable

  • Disciplina técnica

  • Cambios realmente pequeños

Trunk-based no es magia. Sin automatización, es peligroso.


Ninguna estrategia es buena o mala por sí sola

Aquí viene el punto más importante: no existe la mejor estrategia de branching, existe la más adecuada para tu contexto.

Depende de factores como:

  • Tamaño del equipo

  • Nivel de experiencia

  • Frecuencia de despliegue

  • Madurez en testing

  • Tipo de producto

Un error muy común es decir:

“Este equipo grande usa Git Flow, entonces nosotros también”

O

“Google usa trunk-based, hagamos eso”

Copiar sin entender el contexto es la receta perfecta para el caos.


El error más común: copiar sin entender

Muchas veces los equipos adoptan una estrategia porque:

  • La vieron en un blog

  • La usaron en otro trabajo

  • La recomienda una herramienta

  • “Así lo hacen los equipos grandes”

Pero no se preguntan:

  • ¿Tenemos tests suficientes?

  • ¿Desplegamos seguido?

  • ¿Nuestro equipo entiende Git?

  • ¿Nuestro producto lo necesita?

Una estrategia de branching debe adaptarse al equipo, no al revés.


Cómo elegir la estrategia correcta

Antes de decidir, hazte estas preguntas:

  1. ¿Cada cuánto despliegas a producción?

  2. ¿Tu equipo es pequeño o grande?

  3. ¿Tienes CI/CD y tests automatizados?

  4. ¿Qué tan críticos son los errores?

  5. ¿Cuánto tiempo viven tus ramas hoy?

Regla práctica

  • Equipos pequeños + pocos despliegues → Feature branches simples

  • Equipos grandes + releases planificados → Git Flow

  • Equipos maduros + despliegues frecuentes → Trunk-based

Y recuerda: puedes evolucionar la estrategia con el tiempo.


Conclusión

Git no es difícil. Lo difícil es usarlo sin reglas claras, sin contexto y sin entender cómo trabaja tu equipo.

Una buena estrategia de branching:

  • Reduce conflictos

  • Acelera el desarrollo

  • Mejora la calidad

  • Hace que Git deje de ser un problema

No copies estrategias. Diseña la tuya con intención.