Joaquin Martinez

Depura tus errores y construye la mejor versión de ti, cada línea cuenta.

Flujo de trabajo con git: ramas, commits y escenarios de merge explicados

17-01-2025
Git y GitHub
Git
Cover Post

¿Qué es una rama en git?

Las ramas en Git son un concepto fundamental en el control de versiones, permitiendo a los desarrolladores trabajar de forma paralela en nuevas funcionalidades sin afectar la versión principal del proyecto. Cada rama es, en esencia, una línea de tiempo de commits independiente. Mientras la rama principal (tradicionalmente conocida como master o main) se mantiene estable, podemos crear nuevas ramas para desarrollar, experimentar y probar sin riesgos.

Anteriormente, ya hemos trabajado sobre una rama llamada “master” (o “main”), donde hemos creado un commit inicial y varios más referentes a cada cambio que hemos realizado en nuestros repositorios. Las ramas nos ayudan al momento de implementar una funcionalidad nueva en nuestro proyecto. Cuando finalizamos y validamos una nueva funcionalidad, tenemos dos opciones: implementarla en la rama principal o descartarla y eliminar la rama que la contenía.

alt text

El uso de ramas es crucial para el trabajo en equipo, ya que evita que los cambios de un desarrollador interfieran con los de otro. La práctica de crear una rama específica para cada nueva funcionalidad o corrección es una de las bases de los flujos de trabajo profesionales en Git.

Escenarios de Merge: Uniendo líneas de tiempo

Cuando validamos una nueva funcionalidad y la implementamos en la rama principal, a este proceso se le llama merge o unión. El comando para realizarlo es git merge . Al momento de realizar un merge, podemos encontrarnos con tres escenarios diferentes:

Fast-forward

Este escenario ocurre cuando Git detecta que no hay ningún commit nuevo en la rama principal desde que se creó la rama a unir. En este caso, Git simplemente mueve el puntero de la rama principal hacia adelante para que apunte al último commit de la rama que se está uniendo. Los cambios se integran sin necesidad de crear un commit de unión adicional. Esto es lo que se conoce como un fast-forward merge.

Unión automática (Three-way merge)

Este es el escenario más común. Ocurre cuando la rama principal ha tenido commits que la rama secundaria desconoce. Al realizar el merge, Git compara la rama principal, la rama a unir y el ancestro común (el último commit que compartían). Si las líneas de código modificadas no son las mismas, Git las integra automáticamente y realiza el merge sin ningún problema, creando un nuevo commit de unión (merge commit).

Unión manual (Conflictos de merge)

Este es el escenario más complejo. Ocurre cuando dos o más ramas modifican la misma línea de código o archivo al mismo tiempo. En este caso, Git no puede resolver el merge de manera automática y entra en conflicto. Git nos pide que lo resolvamos manualmente. Una vez que hemos resuelto el conflicto, Git crea un nuevo commit de unión. Después de esto, podemos seguir trabajando en nuestro proyecto sin preocupación alguna.

Todos estos escenarios los veremos de manera práctica en los siguientes posts.

Las ramas son un pilar fundamental en cualquier flujo de trabajo con Git. Nos permiten aislar el desarrollo de nuevas características, arreglos de errores o experimentos sin comprometer la estabilidad de la rama principal. Dominar la gestión de ramas y los diferentes tipos de merge es esencial para una colaboración fluida y para mantener un historial de commits limpio y organizado. Es la práctica que te permite iterar rápidamente y deshacer cambios si es necesario, sin miedo a romper tu proyecto.

Post Siguiente

Aprende git: Fusión de ramas con el método Fast-Forward

Post Anterior

Cómo evitar archivos no deseados en git con .gitignore