Release Branch es una rama en Git Flow que se crea a partir de develop para preparar un lanzamiento específico para su publicación. En ella se fija la versión de la aplicación, se corrigen los últimos errores y se actualizan los metadatos, sin agregar nuevas funciones. Según Vincent Driessen, 2010, la rama release separa la preparación del lanzamiento del desarrollo actual, lo que permite realizar ambas actividades en paralelo.
Puntos clave
release/X.Y.Z según la versión de la aplicación.Release Branch (rama de lanzamiento) es una rama temporal en Git Flow, creada a partir de develop cuando el equipo decide que el conjunto actual de funciones está listo para su publicación. Existe exactamente el tiempo que dura la preparación final del lanzamiento, desde unas horas hasta varios días.
El propósito principal de la rama release es congelar un conjunto específico de funciones para el lanzamiento sin detener el desarrollo de las siguientes versiones. Mientras la rama release se prepara para su publicación, otros desarrolladores pueden seguir fusionando ramas feature en develop para el próximo lanzamiento.
En la rama release no se crean nuevas funciones, solo correcciones de errores, actualización de la versión de la aplicación, localización y documentación. Una vez completado todo el trabajo, la rama release se fusiona en main (marcada como lanzamiento) y de vuelta en develop (para que las correcciones lleguen a versiones futuras).
Según Atlassian, 2024, las ramas release son críticamente importantes para proyectos con ciclos de lanzamiento regulares: garantizan previsibilidad y estabilidad en el proceso de publicación.
El ciclo de vida de la rama release, desde su creación hasta su eliminación, incluye varias etapas. Comprender cada etapa ayuda al equipo a sincronizar acciones y evitar errores.
release/2.5.0. develop continúa aceptando ramas feature para la siguiente versión.v2.5.0.El paso 6 — la fusión inversa en develop — a menudo se olvida, pero es críticamente importante. Sin ella, las correcciones realizadas en la rama release no llegarán a develop, y los mismos errores podrían aparecer nuevamente en el próximo lanzamiento.
El tiempo de vida de la rama release depende de la complejidad del lanzamiento y la calidad del código en develop. En promedio, la preparación toma de 2 a 5 días hábiles para una aplicación móvil de tamaño mediano.
En la rama release se realiza un conjunto estrictamente limitado de tareas. Cualquier desviación de esta lista viola el modelo Git Flow y crea riesgos para la estabilidad del lanzamiento.
| Tipo de cambio | Permitido | Ejemplo |
|---|---|---|
| Versionado | Sí | Actualización de versionName en build.gradle |
| Corrección de errores | Sí | Corrección de crash al iniciar |
| Localización | Sí | Adición de traducciones para nuevas pantallas |
| Documentación | Sí | Actualización de CHANGELOG y README |
| Nuevas funciones | No | Adición de una nueva pantalla de perfil |
| Refactorización | No | Reescritura de la capa de red |
| Actualización de librerías | Con cuidado | Solo versiones patch para correcciones |
La regla de prohibición de nuevas funciones es la más importante en la rama release. Si una función no llegó a tiempo para el lanzamiento, espera al siguiente ciclo. Intentar introducir una función incompleta en la rama release es la principal causa de incumplimiento de plazos y errores en producción.
En la rama release se actualiza obligatoriamente el número de versión de la aplicación. Para Android, son los campos versionCode y versionName en build.gradle; para iOS, CFBundleShortVersionString en Info.plist.
// build.gradle (app-level) — actualización de versión en la rama release
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// Para iOS — actualización de Info.plist
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Los desarrolladores principiantes a menudo confunden las ramas release y hotfix, aunque su propósito es fundamentalmente diferente. Elegir el tipo de rama incorrecto puede retrasar una corrección crítica o interrumpir el proceso de lanzamiento.
Si se encuentra un error durante la preparación del lanzamiento (en la rama release), es una corrección normal. Si se encuentra un error en producción (en main), es un hotfix y se crea desde main, incluso si la rama release ya existe.
Un estándar unificado de nomenclatura de ramas release simplifica la navegación por el repositorio y permite que los sistemas CI/CD detecten automáticamente que una rama pertenece al proceso de lanzamiento.
release/2.5.0.release/merlin.release/2024-12-01.El formato release/X.Y.Z es el preferido, ya que vincula explícitamente la rama con el número de versión que se asignará al lanzamiento. Esto simplifica la búsqueda y el procesamiento automático mediante scripts de CI/CD.
La fusión inversa (merge back) de la rama release en develop es una de las operaciones más importantes y, al mismo tiempo, una de las que más frecuentemente se omiten. Sin ella, todas las correcciones realizadas en la rama release se quedan solo en la versión de lanzamiento y no llegan al siguiente ciclo de lanzamiento.
El proceso de fusión inversa se realiza después de que la rama release ya se ha fusionado en main. Primero, release se fusiona en develop, luego se elimina. Esto garantiza que develop contenga todas las correcciones realizadas durante la preparación del lanzamiento.
Después de la fusión inversa, pueden surgir conflictos, especialmente si ya han aparecido nuevas ramas feature en develop que modificaban los mismos archivos. El desarrollador responsable del lanzamiento resuelve estos conflictos y sube develop al servidor.
Algunos equipos usan rebase en lugar de merge para la fusión inversa, para mantener un historial lineal. Sin embargo, merge es más seguro para develop, ya que no reescribe el historial de commits que otros desarrolladores ya podrían estar utilizando.
Veamos el ciclo completo de trabajo con una rama release: desde la creación hasta la eliminación después de un lanzamiento exitoso de una aplicación móvil versión 2.5.0.
# 1. Crear rama release desde develop
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Actualizar versión y correcciones
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Corregir errores (solo bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Enviar rama release al servidor
git push origin release/2.5.0
# 5. Fusionar release en main
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Fusión inversa en develop
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Eliminar rama release
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Los comandos 5 y 6 — la doble fusión — son críticamente importantes. Primero, main recibe el código de lanzamiento y la etiqueta, luego develop se sincroniza con las correcciones de release. Si se omite el paso 6, las correcciones del lanzamiento no llegarán al siguiente ciclo de desarrollo.
Para proyectos móviles con lanzamientos regulares, el proceso de crear una rama release y actualizar la versión se puede automatizar mediante scripts de CI/CD. GitHub Actions permite crear un workflow que, al hacer clic en un botón, crea una rama release con actualización automática de versión.
Para proyectos móviles con lanzamientos regulares, el proceso de crear una rama release y actualizar la versión se puede automatizar mediante scripts de CI/CD. GitHub Actions permite crear un workflow que, al hacer clic en un botón, crea una rama release con actualización automática de versión.
# GitHub Actions — automatización de la creación de rama release
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Preguntas frecuentes
Solo una rama release a la vez, si sigues Git Flow. Tener dos ramas release activas significa que el equipo intenta lanzar dos versiones en paralelo, lo que viola el principio de lanzamientos secuenciales y crea confusión con las versiones.
Elimine los commits de la función incompleta de la rama release mediante git revert y posponga la función hasta el próximo lanzamiento. Nunca publique funcionalidad incompleta en producción: la deuda técnica y los posibles errores no valen la prisa.
Para lanzamientos simples con una sola corrección, se puede omitir la rama release y fusionar directamente desde develop a main. Sin embargo, para lanzamientos estándar, la rama release es obligatoria: fija la versión, aísla la preparación y garantiza la doble fusión de correcciones.
Use git revert en main para crear un nuevo commit que deshaga todos los cambios del lanzamiento. Luego elimine la etiqueta de lanzamiento con git push origin --delete vX.Y.Z. Después de corregir los problemas, cree una nueva rama release con un número de parche incrementado.
Un release candidate (RC) es un artefacto de compilación que pasa por las pruebas finales. Una release branch es una rama de Git a partir de la cual se crea el release candidate. Una misma rama release puede generar múltiples compilaciones RC (RC1, RC2, etc.) a medida que se corrigen errores.
Resumen
release/X.Y.Z con número de versión SemVer.Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también