Tu estrategia es simple y potente: todo el trabajo ocurre en develop y sus ramas auxiliares. La rama main nunca se toca directamente; solo se actualiza (se "despliega") cuando develop está 100% aprobada y lista para producción.
Propósito: Aquí se construye, se prueba y se itera todo el desarrollo. Es tu ambiente de pruebas y el punto de integración para todas las nuevas funcionalidades y correcciones.
Estado: Dinámico, puede ser inestable en proceso, pero debe ser estable cuando el cliente la aprueba.
Tu Rutina Diaria en develop:
Prepárate para una nueva tarea: Siempre que vayas a empezar algo nuevo (una funcionalidad, una corrección), asegúrate de que tu develop local esté actualizada.
Bash
git checkout develop
git pull origin develop
Crea una rama de característica: Aísla tu trabajo en una rama separada para no afectar develop directamente mientras desarrollas.
Bash
git checkout -b mi-nueva-funcionalidad # Nombre descriptivo para tu tarea
Desarrolla y haz commits: Trabaja en tu código, haz tus pruebas y guarda tus progresos con commits pequeños y significativos.
Bash
# Edita, crea, elimina archivos...
git add .
git commit -m "feat: Implementa el listado de productos con filtro"
Sube tu rama de característica (respaldo y colaboración): Es buena práctica subir tu rama regularmente al repositorio remoto.
Bash
git push origin mi-nueva-funcionalidad
Integra en develop (cuando la característica esté lista): Una vez que tu mi-nueva-funcionalidad esté completa y hayas verificado que funciona, fúndela de nuevo en develop. Esto se hace comúnmente a través de una Pull Request (PR) si usas plataformas como GitHub/GitLab, o directamente si eres el único desarrollador.
Bash
git checkout develop # Vuelve a develop
git pull origin develop # Sincroniza develop antes de fusionar para evitar conflictos
git merge mi-nueva-funcionalidad # Fusiona tu característica
# Si hay conflictos, resuélvelos en tu editor, luego:
# git add .
# git commit
git push origin develop # Sube los cambios de develop al repositorio remoto
git branch -d mi-nueva-funcionalidad # Elimina la rama local (opcional)
# git push origin --delete mi-nueva-funcionalidad # Elimina la rama remota (opcional)
Repites estos pasos para cada tarea hasta que develop contenga todo lo que el cliente debe revisar.
Propósito: Representar la versión del software que ha sido aprobada por el cliente y está lista para ser desplegada en producción.
Estado: Siempre estable, funcional y reflejando lo último aprobado.
Actualizando main (Solo cuando el cliente aprueba):
Este es el único momento en que interactúas con main.
Asegúrate de que develop esté en su estado final y aprobado: Antes de cualquier cosa, verifica que la rama develop tenga exactamente lo que el cliente ha aprobado. No debe haber ningún cambio pendiente o error conocido.
Bash
git checkout develop
git pull origin develop # Asegúrate de que tu develop local sea idéntica a la aprobada
Cambia a main:
Bash
git checkout main
Sincroniza main localmente (siempre buena práctica): Aunque no trabajes en main, es posible que en un equipo alguien más haya hecho un hotfix directo. Sincroniza para estar seguro.
Bash
git pull origin main
Fusiona develop en main: Este paso trae todos los cambios de develop a main. Ya que main solo se actualiza de develop, lo más probable es que sea un "fast-forward merge" (un avance rápido sin un commit de fusión).
Bash
git merge develop
Si hay conflictos: Si, por alguna razón, aparecen conflictos (lo cual sería raro si main solo se actualiza de develop y no se trabaja directamente en ella), siempre resuélvelos tomando la versión de develop.
Bash
# Después de resolver el conflicto en tu editor (eligiendo la versión de develop):
git add . # Marca el archivo como resuelto
git commit -m "Merge develop into main - Release X.Y.Z aprobado por cliente"
Sube los cambios a main remota:
Bash
git push origin main
¡Eso es todo! Con este flujo, tu main siempre será un reflejo directo de la versión aprobada por el cliente, y todo el trabajo de desarrollo ocurre en un entorno seguro y aislado en develop. Es un enfoque muy limpio y controlable.