Programa
Rama Git: Guía para crear, gestionar y fusionar ramas
Si alguna vez has trabajado en un proyecto de codificación en grupo, sabrás lo rápido que pueden descontrolarse las cosas cuando varias personas intentan actualizar los archivos duplicados simultáneamente. Surgen conflictos, se cuelan errores y el progreso se detiene. Ahí es donde entran en juego las ramas de Git, no como un truco avanzado, sino como la base de un desarrollo limpio y paralelo.
En Git, la ramificación no sólo se fomenta, sino que se espera. Ya sea experimentando con una nueva función, corrigiendo un error o revisando el código de otra persona, las ramas te permiten trabajar sin pisar a nadie. Te permiten romper cosas, iterar y luego integrar tus cambios limpiamente en la base de código principal.
Esta guía te guía a través de los aspectos esenciales de la ramificación en Git. Empezaremos con git branch
y git checkout
, y luego veremos más detenidamente cómo se crean, gestionan, fusionan y eliminan las ramas. También hablaremos de las mejores prácticas para que puedas mantener tu flujo de trabajo libre de conflictos. Espero que al final de esta guía, tengas una mayor comprensión más allá de memorizar comandos: Comprenderás algo más sobre el flujo de trabajo. Si todo esto te resulta interesante y quieres seguir practicando, nuestro curso Introducción a los conceptos de GitHub es un buen punto de partida.
Entender las ramas de Git
Ahora que hemos preparado el escenario, vamos a desglosar qué es una rama Git. En esencia, una rama de Git no es una carpeta independiente ni una copia completa de tu código base; es sólo un puntero ligero para una confirmación concreta. Ésta es una de las razones por las que Git destaca frente a los antiguos sistemas de control de versiones: la ramificación es rápida, barata y fundamental para los flujos de trabajo cotidianos.
Piensa en una rama como en una línea de tiempo. Cuando creas una nueva rama, esencialmente dices: "Exploremos un nuevo camino a partir de aquí". Todos tus cambios vivirán en esta ruta hasta que decidas fusionarlos o no con la línea principal. Esta flexibilidad hace que sea increíblemente fácil probar ideas, construir características de forma aislada y colaborar con otros sin interferir en el código estable.
Git realiza un seguimiento de tu posición actual en el proyecto utilizando una referencia especial llamada HEAD. Cuando cambias de rama, HEAD
apunta a la punta de la nueva rama. Este detalle entre bastidores permite que Git cambie de contexto tan rápidamente, y también es lo que hace que comandos como git checkout
y git switch
se sientan tan fluidos una vez que entiendes lo que ocurre bajo el capó.
Al comprender cómo funcionan las ramas de Git, desbloquearás el poder de organizar tu flujo de trabajo de desarrollo con claridad y confianza. Si estás siguiendo el curso y quieres poner a prueba estos conceptos, el curso Git Intermedio de DataCamp te guía por la ramificación con mucha práctica guiada.
Listado y visualización de ramas Git
Así pues, has creado ramas y has empezado a utilizarlas, pero ¿cómo haces un seguimiento de todo? Afortunadamente, Git proporciona herramientas sencillas pero potentes para listar, ordenar y filtrar ramas, de modo que nunca pierdas de vista tu flujo de trabajo.
Comprobar la rama actual
Para empezar, vamos a comprobar qué ramas existen en tu repositorio local e identificar en cuál te encuentras actualmente.
git branch
Este comando lista todas tus ramas locales. Verás un asterisco ( *) junto a tu rama actual. Para un look aún más específico, prueba:
git branch --show-current
Esto devuelve sólo el nombre de la rama en la que estás trabajando de forma limpia y bonita.
¿Quieres ver también sucursales remotas? Utilízalo:
git branch -r
Y si quieres ver las ramas local y remota al mismo tiempo:
git branch -a
Esto te da una visión completa de la estructura de ramas de tu proyecto, lo que es especialmente útil cuando colaboras con otros en plataformas como GitHub.
Ordenar y filtrar ramas
A medida que tu proyecto crezca, también lo hará tu lista de ramas. La clasificación y el filtrado te ayudan a gestionar esta lista con eficacia. Para ordenar las ramas por la fecha de confirmación más reciente, utiliza:
git branch --sort=-committerdate
También puedes ordenar por otros criterios, como el nombre del autor, la fecha de creación o la configuración ascendente. Aquí tienes uno muy útil para filtrar las ramas que contienen una confirmación concreta:
git branch --contains <commit>
Esto te muestra qué ramas han incluido ya una confirmación determinada, lo que ayuda a comprobar si se ha fusionado en ellas una corrección de errores o una función. Por el contrario, el comando siguiente te muestra qué ramas no han recogido aún ese commit:
git branch --no-contains <commit>
Gestionar eficazmente las sucursales implica crearlas, así como garantizar su visibilidad y control. Estos comandos ayudan a mantener tu desarrollo limpio, organizado y eficaz.
¿Quieres dominar cómo se relacionan con la colaboración? El curso Fundamentos de Git proporciona una base excelente y cubre flujos de trabajo del mundo real que utilizarás repetidamente.
Crear una nueva rama Git
Ahora que ya sabes cómo listar y cambiar de una rama a otra, vamos a ver cómo crearlas. Crear ramas es una parte esencial del flujo de trabajo de Git y, afortunadamente, crear ramas nuevas es sencillo, tanto si estás creando una rama de características, una revisión o experimentando con algo totalmente nuevo.
Crear una rama sin cambiar
A veces, quieres crear una rama sin pasar inmediatamente a ella. Esto es útil cuando preparas varias ramas a la vez o cuando configuras flujos de trabajo para otros.
git branch new-feature
Este comando crea una rama llamada new-feature
, pero seguirás en tu rama actual. Puedes cambiar a ella más tarde, cuando estés preparado para trabajar en ella.
Crear y cambiar a una rama simultáneamente
Si te lanzas directamente al desarrollo, puedes crear y cambiar a la nueva rama en un solo movimiento. En versiones anteriores de Git, usarías:
git checkout -b new-feature
Sin embargo, en el Git moderno, el enfoque es más transparente e intuitivo:
git switch -c new-feature
Esto no sólo crea la rama, sino que también la comprueba inmediatamente, para que estés listo para empezar a trabajar.
Establecer ramas ascendentes
Cuando trabajes con repositorios remotos, a menudo querrás que tu rama local siga a una remota. Esto simplifica el envío y recepción de actualizaciones. Para crear una rama que rastree una rama remota desde el principio, utiliza
git branch --track new-feature origin/new-feature
Si ya has creado la rama y quieres establecer o cambiar el upstream, este comando sirve:
git branch --set-upstream-to=origin/new-feature
Esta configuración garantiza que tu rama local sepa de qué rama remota tirar o a cuál empujar, manteniendo tu flujo de trabajo fluido y conectado.
Cambiar entre ramas Git
Una vez que hayas creado unas cuantas ramas, a menudo necesitarás saltar de una a otra, ya sea volviendo a main
para fusionar una corrección o cambiando a una rama de características para seguir codificando. Git hace que este proceso sea fluido y, como la mayoría de las cosas relacionadas con Git, hay más de una forma de hacerlo.
Utilizar git checkout
Durante mucho tiempo, git checkout
fue el comando más utilizado para cambiar de rama:
git checkout feature-login
Este comando cambia tu directorio de trabajo a la rama feature-login
, actualizando todos tus archivos para reflejar la instantánea de esa rama. Es fiable y todavía se utiliza mucho. Pero he aquí la cuestión: git checkout
hace unmontón de cosas. Sirve para cambiar de rama, restaurar archivos e incluso comprobar commits. Eso puede resultar confuso, sobre todo si estás empezando.
Usar el interruptor git
Para hacer las cosas más intuitivas, Git introdujo the git switch
en la versión 2.23:
git switch feature-login
Esto hace exactamente lo que esperas: cambia de rama. No toca tu árbol de trabajo ni restablece tus archivos a menos que se lo indiques. Es más sencillo, más seguro y más fácil de enseñar y recordar.
Entonces, ¿cuándo debes utilizar cuál?
- Utiliza
git switch
para pasar de una rama a otra: es claro y está diseñado para ello. - Utiliza
git checkout
si necesitas restaurar archivos o consultar un commit concreto.
Fusionar ramas Git
Así que has estado trabajando en una función en una rama separada. Ahora llega el momento de la verdad: combinar tus cambios en la rama principal. En Git, este proceso se denomina fusión. Dependiendo de la historia de tus ramas, hay varias formas de enfocarlo.
Fusión rápida
Supongamos que tu feature branch
partió de the main
, y mientras trabajabas en él, nadie más tocó el main
. En este caso, Git no necesita pensar mucho. Simplemente mueve el puntero main
hacia delante hasta la última confirmación en feature-branch
.
git checkout main
git merge feature-branch
No se crea una nueva confirmación-Git avanza rápidamente main
. Limpio, sencillo y perfecto para proyectos en solitario o ramas de corta duración.
Fusión tripartita
Las cosas se ponen más interesantes cuando ambas ramas han progresado independientemente la una de la otra. Es posible que tu compañero de equipo haya añadido algunos cambios al principal mientras tú codificabas en the feature branch
. Ahora, Git tiene que mirar tres instantáneas: el ancestro común, tu rama y la rama de destino.
git checkout main
git merge feature-branch
En este caso, Git crea una nueva confirmación de fusión para combinar las dos ramas. Si hay conflictos, digamos que tú y tu compañero de equipo habéis cambiado la misma línea en el mismo archivo, Git os pedirá que los resolváis manualmente. Editarás el archivo, lo marcarás como resuelto y luego confirmarás la fusión.
git add .
git commit
Si esto te parece un poco intimidante, puedes consultar nuestro Tutorial de Fusión Git en: Una Guía Completa con Ejemplos es una excelente guía que cubre todo lo esencial, incluido el manejo de conflictos con elegancia.
Rebasar en lugar de fusionar
¿No te gusta que los commits de fusión saturen tu historial? No estás sola. Ahí es donde entra Git rebase
. En lugar de crear una nueva confirmación de fusión, rebase
vuelve a colocar tus cambios encima de otra rama, lo que da como resultado un historial más limpio y lineal.
git checkout feature-branch
git rebase main
Así, cuando fusiones, Git verá una línea recta, sin necesidad de una confirmación de fusión. Sin embargo, utilízalo con precaución, sobre todo cuando trabajes con ramas compartidas. Reescribir la historia puede ser peligroso si otros están trabajando en el mismo código.
Para saber cuándo es mejor usar fusionar o rebase (y cómo rebasear con seguridad), el curso Git Intermedio ofrece orientación práctica.
Borrar ramas Git
Tras una fusión exitosa, es una buena idea limpiar las ramas que ya no necesites, tanto local como remotamente. Mantiene tu espacio de trabajo ordenado y tu historial Git más fácil de navegar. Vamos a ver cómo hacerlo sin perder el sueño por borrar accidentalmente algo importante.
Borrar sucursales locales
Cuando una rama se ha fusionado y su trabajo ha terminado, puedes eliminarla con seguridad de tu repositorio local:
git branch -d feature-branch
La bandera-d significa "borrar". Git comprobará que la rama ya ha sido fusionada para evitar posibles pérdidas de datos.
Pero, ¿y si quieres eliminar una rama, aunque esté fusionada? Ahí es donde entra la mayúscula -D:
git branch -D feature-branch
Esto fuerza la eliminación, aunque Git te advierta de que la rama no se ha fusionado. Antes de pulsar intro, asegúrate de que no necesitas esos cambios.
¿Quieres profundizar en la gestión de tu espacio de trabajo local y tus sucursales? Consulta nuestra página Git Pull Force: Cómo sobrescribir una rama local con el tutorial remoto. Es un compañero útil para asegurarte de que no sólo eliminas, sino que gestionas las ramas de forma segura.
Borrar ramas remotas
La limpieza local es sólo la mitad del trabajo. Si la rama también vive en una remota (como GitHub), también querrás eliminarla allí, especialmente si ya has terminado con la función o la corrección de errores.
git push origin --delete feature-branch
Este comando indica a Git que elimine la rama del origen remoto. Es limpio y directo, y ayuda a evitar que tu mando a distancia se llene de ramas sin usar.
Una vez que hayas eliminado las ramas remotas, limpiar las referencias de seguimiento locales también es una buena idea.
git fetch -p
El -
p
significa "ciruela pasa". Elimina cualquier rama de seguimiento remoto obsoleta que ya no exista en el servidor.
Para más hábitos útiles de higiene Git, el Tutorial Git Push y Pull y la Hoja de trucos Git completa son referencias rápidas perfectas.
Empujar y tirar de ramas Git
Una vez que hayas creado y organizado tus ramas localmente, el siguiente paso es sincronizarlas con el repositorio remoto. Esto es esencial para la colaboración y las copias de seguridad. Vamos a ver cómo empujar, tirar y hacer un seguimiento eficaz de las ramas.
Enviar una nueva rama a remoto
Has creado una nueva función localmente y la has probado, y ahora quieres compartirla con tu equipo o hacer una copia de seguridad. Para empujar una nueva rama a un repositorio remoto (normalmente llamado origin
), utiliza:
git push -u origin new-feature
La bandera -u
(abreviatura de --set-upstream
) indica a Git que recuerde la rama remota para futuros pulls y pushes. Así, la próxima vez, podrás ejecutar git pull
o git push
sin especificar la rama.
Si te preguntas qué más ocurre entre bastidores durante un push o pull, nuestro Tutorial Git Push y Pull te lo explica con ejemplos que puedes seguir.
Extraer cambios de una rama remota
Supongamos que otra persona ha enviado actualizaciones a la misma rama en la que estás trabajando. Querrás tirar de esos cambios para mantenerte sincronizado:
Git pull origin new-feature
Esto obtiene los últimos commits de la rama remota y los fusiona en tu rama local. Si quieres evitar la fusión de confirmaciones, considera utilizar lo siguiente:
git pull --rebase origin new-feature
Como explica la sección de fusión, --rebase
ayuda a mantener limpio tu historial de confirmaciones.
Seguimiento de una rama remota
Cuando quieras empezar a trabajar con una rama que ya existe en el remoto, la forma más fácil de configurar las cosas es:
git checkout --track origin/feature-xyz
Este comando comprueba la rama remota y configura automáticamente el seguimiento, de modo que los futuros pulls y pushs sean pan comido.
Problemas comunes y resolución de problemas
Incluso con los mejores flujos de trabajo, las cosas no siempre salen bien. Ya sea un conflicto de fusión, una rama borrada accidentalmente o algunos cambios no comprometidos que se interponen en tu camino, Git tiene herramientas para ayudarte a recuperarte. Veamos algunos de los problemas de ramificación más comunes y cómo solucionarlos.
Manejar los conflictos de fusión
Acabas de intentar fusionar una rama, y Git lanza un conflicto de fusión. Esto ocurre cuando dos ramas cambian de forma diferente la misma parte de un archivo, y Git no puede decidir qué cambio conservar.
He aquí cómo abordarlo:
git status
Esto te indica qué archivos están en conflicto. Entonces, puedes utilizar
git diff
Para ver cuál es la causa del problema. A partir de ahí, abre manualmente el archivo o archivos en conflicto, resuelve las diferencias y luego
git add <resolved-file>
git commit
Si quieres saber más sobre la fusión de flujos de trabajo y la resolución de conflictos, consulta el Tutorial de Fusión Git, que proporciona un recorrido completo.
Recuperar ramas borradas
¿Has borrado accidentalmente una rama y sientes que cunde el pánico? No te preocupes: no está perdido para siempre si actúas rápido.
Puedes recuperarlo utilizando git reflog
, que registra tus posiciones recientes en HEAD:
git reflog
Busca el hash del commit de antes de eliminar la rama y vuelve a crearlo con:
git checkout -b your-branch-name <commit-hash>
Y así de fácil, tu rama ha vuelto. ¿Quieres entender mejor cómo Git rastrea estas referencias? Nuestra Guía Git Reflog lo explica con ejemplos reales.
Guardar los cambios antes de cambiar
A veces, quieres cambiar de rama, pero tienes cambios no comprometidos. Git no te dejará cambiar si eso puede suponer una pérdida de trabajo. Ahí es donde entra git stash
.
git stash
Y Git apartará temporalmente tus cambios. Después de cambiar de rama, puedes traerlos de vuelta con:
git stash pop
Esto es especialmente útil cuando saltas entre funciones o revisiones.
Si gestionas muchos cambios o limpias tu directorio de trabajo, puede que también te interese Git Clean: Elimina los archivos sin seguimiento y mantén los repositorios ordenados.
Estrategias avanzadas de ramificación
A estas alturas, ya habrás visto cómo crear, cambiar y gestionar ramas Git con facilidad. Pero, ¿cómo utilizan los equipos estas ramas en los proyectos del mundo real? La respuesta está en elegir la estrategia de bifurcación adecuada: una estructura para saber cómo y cuándo utilizar las bifurcaciones en tu flujo de trabajo de desarrollo. Exploremos algunos de los enfoques más populares.
Flujo de trabajo de la rama de características
El flujo de trabajo de bifurcación de características es una de las estrategias más habituales, sobre todo en proyectos colaborativos. Funciona así:
Cada nueva función tiene su propia rama, creada a partir de la rama principal (o de desarrollo). Esto permite a los programadores trabajar de forma independiente sin afectar al código listo para producción.
git switch -c feature/login-page
Una vez que la función está completa y probada, se integra en la rama principal (o en una rama de preparación) mediante una solicitud de extracción.
Este modelo ayuda a aislar el trabajo, hace que las revisiones del código sean más manejables y evita saturar tu rama principal con funciones a medio terminar. Para que la colaboración a distancia sea fluida, no olvides empujar tus ramas:
git push -u origin feature/login-page
¿Necesitas un repaso sobre empujar y tirar de las ramas? El tutorial Git Push and Pull te guía a través de todo el proceso.
Flujo de trabajo GitFlow
Si trabajas en un proyecto con lanzamientos regulares, GitFlow puede ser una buena opción. Este flujo de trabajo introduce funciones estructuradas para distintos tipos de ramas:
-
main
: siempre contiene código listo para la producción. -
develop
: rama de integración de funciones. -
feature/*
: ramas efímeras para nuevas funciones. -
release/*
: ramas de preproducción para pruebas. -
hotfix/*
: Las soluciones rápidas se basan en lamain
.
Aquí tienes un ejemplo rápido de cómo iniciar una nueva rama de características utilizando las herramientas de GitFlow:
git flow feature start payment integration
Esta estrategia añade un poco de complejidad, pero brilla con luz propia en equipos grandes en los que la estructura clara y la estabilidad son prioritarias. Si estás explorando flujos de trabajo más allá de GitHub, consulta Qué es GitLab: Características, ventajas y cómo empezar para conocer otro punto de vista sobre las prácticas estructuradas de Git.
Desarrollo basado en troncos
¿Prefieres una ramificación mínima y una entrega rápida? El desarrollo basado en troncos puede ser tu estilo. En esta estrategia, todos los programadores se comprometen con una única rama, normalmente la main
, con commits pequeños y frecuentes. En lugar de ramas de características de larga duración, este enfoque fomenta las ramas de corta duración o los commits directos a la rama main
.
Es rápido y sencillo, pero requiere disciplina, una sólida automatización de las pruebas y una buena comunicación. Este modelo es estándar en startups y equipos que practican DevOps o CI/CD. Elegir una estrategia de ramificación depende del tamaño de tu equipo y de la cadencia de publicación, y también, por supuesto, del nivel de colaboración.
Conclusión
Las ramas son el corazón del sistema de control de versiones de Git. Permiten a los programadores trabajar en nuevas funciones, correcciones de errores y experimentos de forma aislada, sin alterar el código base principal. Esta flexibilidad conduce a flujos de trabajo más limpios y organizados y a una mejor colaboración en equipo.
Comprometiéndote con frecuencia, fusionando responsablemente y manteniendo una estructura de ramas limpia, reduces el riesgo de conflictos y haces que tu código base sea más fácil de navegar y mantener. Sin duda, dominar las ramas de Git te ayuda a entregar mejor software a lo largo del tiempo.
Redactor técnico especializado en IA, ML y ciencia de datos, que hace que las ideas complejas sean claras y accesibles.
Aprende hoy los fundamentos de Git
Aprende Git con DataCamp
Programa
Git Fundamentals
Curso
Introduction to Git
Tutorial
Git rename branch: Cómo cambiar el nombre de una rama local o remota
Tutorial
Tutorial de GitHub y Git para principiantes
Tutorial
Tutorial de GIT Push y Pull
Olivia Smith
13 min
Tutorial
Git pull force: Cómo sobrescribir una rama local con una remota
Tutorial
Tutorial de Git Revert y Git Reset para principiantes
Tutorial