Si acabas de terminar un bootcamp, te has graduado con un grado en informática o has aprendido a programar por tu cuenta probablemente hasta ahora solo has empujado directamente a main o has creado una rama de desarrollo que luego fusionabas con main. Cuando empiezas a trabajar en equipo las cosas se complican un poco y es recomendable preguntar y observar las mejores prácticas de git, nombres de ramas y solicitudes de fusión del equipo.

En términos sencillos rebase vs merge: git rebase permite volver a reproducir tus commits encima del main actual reescribiendo el historial para que sea limpio y lineal mientras que git merge crea un commit de merge y preserva todo el historial. Muchas empresas prefieren rebases para mantener un historial más legible salvo en proyectos open source donde se suele preferir merge.

Pasos para rebase y squash antes de abrir una solicitud de fusión

1 Sincroniza tu main local con el remote: git pull origin main. origin es el repositorio remoto y main es la rama remota. Esto asegura que vas a reescribir tus commits encima del main más reciente.

2 Sitúate en la rama que quieres rebasar sobre main: git checkout nombre-de-tu-rama.

3 Abre el modo interactivo y squash o reescribe mensajes: git rebase -i main. El flag -i activa el modo interactivo para combinar commits innecesarios o reescribir mensajes. En el editor puedes convertir picks en squash para consolidar commits pequeños como arreglos o comentarios y mantener solo los commits relevantes. Cuando termines guarda y sal del editor para aplicar el rebase. Puedes verificar el resultado con git log --oneline.

4 Empuja tu rama local al remoto: git push origin nombre-de-tu-rama. Ahora el repositorio remoto detectará los cambios y podrás crear una solicitud de fusión o merge request en la plataforma que use tu equipo.

5 Crea la merge request en GitLab o la plataforma que utilice tu equipo, espera que pasen los pipelines de CI y consigue las aprobaciones necesarias.

6 Fusiona desde la interfaz remota y, si procede, marca eliminar la rama origen para mantener el repositorio limpio. Después sincroniza tu main local de nuevo con git pull origin main para incluir los cambios fusionados.

7 Limpieza opcional: elimina la rama local si ya no es necesaria y crea una nueva rama para el siguiente ticket o tarea.

Conflictos: durante el rebase local pueden surgir conflictos si alguien modificó las mismas líneas en main desde que creaste tu rama. También puede aparecer un conflicto al fusionar si otro cambio fue mergeado en remoto después de tu rebase y hay solapamiento. Aprende a resolver conflictos con git status y git mergetool según la configuración de tu equipo.

Recomendaciones prácticas: antes de empezar un ticket asegúrate de que tu main local está alineado con el remoto y vuelve a sincronizar antes y después de una merge request. Usa commits significativos y squash para mantener un historial claro, especialmente en equipos que revisan pull requests. Si trabajas en proyectos con muchos contribuidores externos puede tener sentido usar merge para preservar el historial público.

En Q2BSTUDIO somos una empresa de desarrollo de software que diseña aplicaciones a medida y software a medida, especialistas en inteligencia artificial e ia para empresas, ciberseguridad y servicios cloud aws y azure. Si necesitas soluciones a medida para tu proyecto puedes conocer nuestro servicio de desarrollo de aplicaciones y software multiplataforma o investigar opciones de servicios cloud en AWS y Azure. Ofrecemos además servicios de ciberseguridad y pentesting, servicios inteligencia de negocio y power bi, así como agentes IA e integración de inteligencia artificial empresarial para automatizar procesos y mejorar la toma de decisiones.

Conclusión: el rebase y el squash son herramientas poderosas para mantener un historial limpio y facilitar revisiones, pero recuerda que los cambios locales sólo afectan al remoto cuando los empujas. Mantener sincronizados main local y remoto antes y después de las merge requests es una buena práctica que reduce conflictos y acelera el flujo de trabajo en equipos que desarrollan software a medida y soluciones con inteligencia artificial.