Main Branch (anteriormente Master) es la rama principal de Git que contiene código de producción estable listo para implementarse. Cada commit en main corresponde a una versión de lanzamiento del proyecto, y la rama misma está protegida contra cambios directos y sirve como fuente única de verdad para todo el equipo. Según GitHub, 2020, desde octubre de 2020, la nueva rama por defecto se llama main en lugar de master.
Puntos clave
Main Branch (o Master — según la configuración del repositorio) es la rama por defecto que se crea al inicializar cualquier repositorio Git. Es la rama principal del proyecto y contiene código listo para implementarse en producción.
A diferencia de develop, donde el trabajo diario con nuevas funciones está en pleno apogeo, main es el escaparate del proyecto. Cada versión del código en main ha pasado por un ciclo completo: desarrollo en una rama feature, integración en develop, preparación del lanzamiento en una rama release y pruebas finales. Solo después de eso los cambios llegan a main.
Principio clave: main siempre debe ser estable. Si se encuentra un error en main, significa que se necesita un hotfix urgente fuera de turno. Por lo tanto, en proyectos profesionales, main está protegida contra cambios accidentales mediante reglas de protección de rama.
Según Git Book, main no es una rama especial con propiedades únicas, sino una referencia normal a un commit que por convención se considera principal. Git no hace distinción entre main y cualquier otra rama a nivel del sistema.
Históricamente, la rama por defecto en Git se llamaba master. En junio de 2020, el movimiento Black Lives Matter llamó la atención sobre los términos master y slave en la industria TI. GitHub anunció la transición al término main para la rama por defecto.
Desde octubre de 2020, todos los repositorios nuevos en GitHub se crean con la rama main. GitLab y Bitbucket también implementaron soporte para main como nombre por defecto. Git 2.28 (julio de 2020) agregó la opción init.defaultBranch para configurar el nombre de la rama por defecto.
Técnicamente, renombrar una rama existente de master a main es una operación simple. El principal desafío es actualizar todas las referencias en las configuraciones de CI/CD, documentación y repositorios locales de los desarrolladores.
Para renombrar una rama en un repositorio existente, ejecute:
# Renombrar localmente master a main
git branch -m master main
# Actualizar el repositorio remoto
git push -u origin main
# Eliminar el antiguo master en el servidor
git push origin --delete master
# Actualizar HEAD en el servidor
# (a través de la interfaz web de GitHub: Settings → Branches → Default branch)
Git Flow y GitHub Flow definen el rol de la rama main de manera diferente. La elección del modelo depende del tamaño del equipo, la frecuencia de lanzamientos y los requisitos de estabilidad del código.
| Característica | Git Flow | GitHub Flow |
|---|---|---|
| Rol de main | Solo versiones de lanzamiento | Rama central de desarrollo |
| Ramas adicionales | Develop, Release, Hotfix | Solo ramas feature |
| Frecuencia de lanzamientos | Cada 1–4 semanas | Varias veces al día |
| Complejidad | Alta | Baja |
| Cuándo elegir | Aplicaciones móviles con ciclos de lanzamiento | Servicios web con despliegue continuo |
Para el desarrollo móvil, Git Flow es el estándar, ya que publicar una aplicación en App Store y Google Play tiene ciclos de lanzamiento fijos. GitHub Flow es más adecuado para proyectos web que se pueden implementar varias veces al día.
En GitHub Flow, no hay rama develop. Todas las ramas feature se crean directamente desde main y, al finalizar, se fusionan mediante un Pull Request. Cada fusión en main activa automáticamente el despliegue a producción. Este modelo requiere un alto nivel de automatización de pruebas y disciplina del equipo.
En GitHub Flow, no hay rama develop. Todas las ramas feature se crean directamente desde main y, al finalizar, se fusionan mediante un Pull Request. Cada fusión en main activa automáticamente el despliegue a producción. Este modelo requiere un alto nivel de automatización de pruebas y disciplina del equipo.
Branch protection para main es una configuración obligatoria en cualquier proyecto comercial. Sin ella, un push accidental podría enviar código incompleto a producción o romper una aplicación en funcionamiento para todos los usuarios.
Configurar las seis reglas es el estándar para proyectos móviles con una audiencia de 10 000+ usuarios. Para proyectos pequeños, las tres primeras reglas son suficientes.
El nivel de protección de main depende de la escala del proyecto. Una startup puede arreglárselas con protección mínima, mientras que una aplicación empresarial requiere restricciones máximas.
Tagging es la práctica de crear referencias con nombre a commits específicos en main. Cada etiqueta corresponde a una versión de la aplicación publicada en producción. Esto permite cambiar rápidamente a cualquier versión anterior para depuración o parches.
El estándar de nomenclatura de etiquetas en el desarrollo móvil es SemVer (Versionado Semántico): v1.2.3, donde el primer número es la versión mayor (cambios importantes), el segundo es la versión menor (nuevas funciones) y el tercero es el parche (correcciones).
Se crea una etiqueta después de fusionar la rama release en main. Luego, este commit se compila en CI/CD, se firma y se envía a la tienda de aplicaciones. Si se encuentra un error en la etiqueta, se crea una rama hotfix desde esa etiqueta.
# Crear etiqueta de lanzamiento anotada
git tag -a v2.4.1 -m "Release version 2.4.1"
# Enviar etiqueta al servidor
git push origin v2.4.1
# Ver todas las etiquetas en el repositorio
git tag -l "v2.*"
# Crear rama hotfix desde una etiqueta específica
git checkout -b hotfix/crash-fix v2.4.1
Comprender la jerarquía de ramas en Git Flow es la base para organizar adecuadamente el desarrollo colaborativo. Cada tipo de rama tiene su propia fuente, propósito y reglas de fusión.
Regla importante: feature nunca se fusiona directamente en main. feature → develop → release → main es la cadena de fusión correcta. Violar esta regla anula el propósito de todo el modelo Git Flow.
Considere un escenario: el equipo ha completado la preparación del lanzamiento v2.5.0. La rama release está revisada y lista para fusionarse en main. Después de la fusión, se crea una etiqueta y se publica el lanzamiento.
# Cambiar a main y actualizar
git checkout main
git pull origin main
# Fusionar la rama release verificada
git merge --no-ff release/2.5.0
# Crear etiqueta de lanzamiento
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Enviar main y la etiqueta al servidor
git push origin main --tags
La bandera --no-ff (sin avance rápido) garantiza la creación de un commit de fusión, incluso si la fusión podría haberse realizado simplemente moviendo el puntero. Esto preserva la información de que los cambios provinieron de una rama release, lo que facilita el análisis del historial.
Si se descubre un error crítico en producción, el proceso difiere de un lanzamiento normal. Se crea un hotfix desde main y, después de la corrección, se fusiona tanto en main como en develop.
Si se descubre un error crítico en producción, el proceso difiere de un lanzamiento normal. Se crea un hotfix desde main y, después de la corrección, se fusiona tanto en main como en develop.
# Crear rama hotfix desde main
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Corregir y hacer commit
git add src/fix/
git commit -m "Fix crash on login screen"
# Fusionar hotfix de vuelta a main
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Fusionar hotfix también en develop
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Eliminar rama hotfix
git branch -d hotfix/2.5.1-crash-fix
Preguntas frecuentes
Técnicamente — sí, es una referencia normal a un commit. Pero prácticamente — no, ya que main es la rama por defecto y la mayoría de las plataformas no permiten eliminar la rama establecida como rama por defecto. En lugar de eliminar, cree una nueva rama por defecto y luego elimine la anterior.
Si el error no es crítico, use el proceso normal: cree una rama feature desde develop, corrija el error, realice una revisión de código y espere el próximo ciclo de lanzamiento. Hotfix se usa solo para errores críticos que bloquean el trabajo del usuario.
main es una rama local en su computadora. origin/main es un caché local del estado de la rama remota en el servidor. El comando git fetch actualiza origin/main, mientras que git pull fusiona inmediatamente los cambios en su main local.
Use git clone para copiar todo el repositorio a un nuevo directorio. Si necesita cambiar la URL remota, ejecute git remote set-url origin. Para cambiar el directorio de trabajo sin copiar el repositorio, use git worktree add.
Sí, incluso en un equipo de dos personas, la protección de main está justificada. Un push accidental con un comando incorrecto podría sobrescribir el historial. La protección mínima — prohibir pushes directos y requerir PRs — toma 5 minutos de configuración y evita horas de recuperación de datos.
Resumen
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