El Flujo de Ramas por Funcionalidad: La Base de Todo
Este es el flujo de trabajo más fundamental. La regla de oro es simple pero poderosa: la rama `main` es sagrada. Cualquier trabajo nuevo se realiza en una rama separada y aislada para garantizar que `main` siempre sea estable y desplegable.
Diagrama de Flujo: Feature Branch
El Ciclo de Vida de una Funcionalidad (Línea de Tiempo)
- Paso 1: Sincronizar- Antes de escribir una sola línea de código, asegúrate de tener la versión más reciente del proyecto. Esto previene conflictos futuros. 
- Paso 2: Ramificar- Crea una nueva rama a partir de `main`. El nombre debe ser descriptivo, por ejemplo: `feature/login-form` o `fix/bug-report-pdf`. 
- Paso 3: Desarrollar- Trabaja en tu rama. Haz commits pequeños y atómicos. Tu trabajo está completamente aislado y no interfiere con el de los demás. 
- Paso 4: Pull Request (PR)- Cuando tu trabajo esté listo, sube tu rama y abre un Pull Request. Esta es tu solicitud formal para integrar tus cambios en `main`. 
- Paso 5: Revisión de Código- Tu equipo revisa el código, sugiere mejoras y aprueba los cambios. Este es el control de calidad más importante. 
- Paso 6: Fusionar y Limpiar- Una vez aprobado, el PR se fusiona. ¡Tu código ya es parte de la rama principal! Se procede a limpiar las ramas ya fusionadas. 
Ejemplo Práctico con Comandos
Veamos cómo un desarrollador llamado "Carlos" implementaría este flujo para añadir un nuevo módulo de reportes.
Nivel Profesional: El Flujo de Trabajo GitFlow
Para proyectos más grandes con un ciclo de vida definido (versiones, lanzamientos, parches urgentes), GitFlow proporciona una estructura robusta y predecible. Introduce ramas adicionales con responsabilidades muy específicas.
Diagrama de Flujo: GitFlow
Las Ramas de GitFlow y sus Roles
Main
Propósito: Refleja el estado exacto de producción. Siempre debe ser estable y desplegable. Regla: Nadie hace push directamente aquí. Solo recibe fusiones de ramas `release` y `hotfix`.
Develop
Propósito: Rama principal de integración. Contiene todas las funcionalidades completadas que se incluirán en el próximo lanzamiento. Regla: Es la rama "madre" de todas las `feature` y la "base" de las `release`.
Feature
Propósito: Desarrollar nuevas funcionalidades de forma aislada. Flujo: Nace de `develop` y se fusiona de vuelta a `develop` a través de un PR.
Release
Propósito: Preparar un nuevo lanzamiento (pruebas finales, ajustes). Flujo: Nace de `develop`. Al finalizar, se fusiona a `main` (para el tag) y a `develop` (para incorporar ajustes).
Hotfix
Propósito: Solucionar un bug crítico en producción de forma urgente. Flujo: Nace de `main`. Al finalizar, se fusiona tanto a `main` como a `develop`.
Simulación Práctica: Lanzamiento de la Versión 2.0
El Arte de Resolver Conflictos de Fusión
Un conflicto no es un error, es una señal de que Git necesita ayuda humana. Ocurre cuando dos ramas han modificado la misma línea de un archivo de formas diferentes. ¡Es una parte normal del trabajo en equipo!
Anatomía de un Conflicto
Al intentar fusionar, Git te avisará. El archivo en conflicto contendrá marcadores visuales:
app_title <- "Dashboard de Monitoreo ICFES"
=======
app_title <- "Tablero de Seguimiento de Pruebas"
>>>>>>> feature/new-title (Los cambios de la rama que intentas fusionar)