Using branches

rama de git


Este documento constituye una revisión en profundidad del comando git branch y una exposición general del modelo de creación de ramas de Git. La creación de ramas es una función disponible en la mayoría de los sistemas de control de versiones modernos. La creación de ramas en otros sistemas de control de versiones puede abarcar mucho tiempo y espacio de disco. En Git, las ramas son parte del proceso de desarrollo diario. Las ramas de Git son un puntero eficaz a las instantáneas de tus cambios. Cuando quieres añadir una nueva función o solucionar un error (sin importar su tamaño), generas una nueva rama para alojar estos cambios. Esto hace que resulte más complicado que el código se fusione con el código base principal, y te da la oportunidad de limpiar tu historial futuro antes de fusionarlo con la rama principal.

Git Tutorial: git branch

El diagrama anterior representa un repositorio con dos líneas de desarrollo aisladas, una para una función pequeña y otra para una función más extensa. Al desarrollarlas en ramas, no solo es posible trabajar con las dos de forma paralela, sino que también se evita que el código dudoso se fusione con la rama maestra.

La implementación que subyace a las ramas de Git es mucho más sencilla que la de otros modelos de sistemas de control de versiones. En lugar de copiar archivos entre directorios, Git almacena una rama como referencia a una confirmación. En este sentido, una rama representa el extremo de una serie de confirmaciones, es decir, no es un contenedor de confirmaciones. El historial de una rama se extrapola de las relaciones de confirmación.

Durante la lectura, recuerda que las ramas de Git no son como las ramas de SVN. Las ramas de SVN solo se usan para capturar el esfuerzo de desarrollo a gran escala ocasional, mientras que las ramas de Git son una parte integral del flujo de trabajo diario. El siguiente contenido amplía la información sobre la arquitectura interna de creación de ramas de Git.

Funcionamiento

Una rama representa una línea independiente de desarrollo. Las ramas sirven como una abstracción de los procesos de cambio, preparación y confirmación. Puedes concebirlas como una forma de solicitar un nuevo directorio de trabajo, un nuevo entorno de ensayo o un nuevo historial de proyecto. Las nuevas confirmaciones se registran en el historial de la rama actual, lo que crea una bifurcación en el historial del proyecto.

El comando git branch te permite crear, enumerar y eliminar ramas, así como cambiarles el nombre. No te permite cambiar entre ramas o volver a unir un historial bifurcado. Por este motivo, git branch se integra minuciosamente con los comandos git checkout y git merge.

Opciones comunes

git branch

Enumera todas las ramas de tu repositorio. Es similar a git branch --list.

git branch <branch>

Crea una nueva rama llamada <branch>. Este comando no extrae la nueva rama.

git branch -d <branch>

Elimina la rama especificada. Esta es una operación segura, ya que Git evita que elimines la rama si tiene cambios que aún no se han fusionado.

git branch -D <branch>

Fuerza la eliminación de la rama especificada, incluso si tiene cambios sin fusionar. Este comando lo puedes usar si quieres eliminar de forma permanente todas las confirmaciones asociadas con una línea concreta de desarrollo.

git branch -m <branch>

Cambia el nombre de la rama actual a <branch>.

git branch -a

Enumera todas las ramas remotas. 

Creación de ramas

Es importante comprender que las ramas son solo punteros a las confirmaciones. Cuando creas una rama, todo lo que Git tiene que hacer es crear un nuevo puntero, no modifica el repositorio de ninguna otra forma. Si empiezas con un repositorio que tiene este aspecto:

Git Tutorial: repository without any branches

Y, a continuación, creas una rama con el siguiente comando:

git branch crazy-experiment

El historial del repositorio no se modificará. Todo lo que necesitas es un nuevo puntero de la confirmación actual:

Git Tutorial: Create new branch

Ten en cuenta que este comando solo crea la nueva rama. Para empezar a añadir confirmaciones, tienes que seleccionarla con el comando git checkout y, a continuación, usar los comandos estándares git add y git commit

Creación de ramas remotas

Por ahora, todos los ejemplos han ilustrado operaciones de ramas locales. El comando git branch también funciona en ramas remotas. Para poder trabajar en ramas remotas, hay que configurar un repositorio remoto y añadirlo a la configuración del repositorio local.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Añade un repositorio remoto a la configuración del repositorio local
$ git push <new-remote-repo> crazy-experiment~
# Envía la rama crazy-experiment al nuevo repositorio remoto (new-remote-repo)

Este comando enviará una copia de la rama local crazy-experiment al repositorio remoto <remote>.

Eliminación de ramas

Una vez que hayas terminado de trabajar en una rama y la hayas fusionado con el código base principal, puedes eliminar la rama sin perder ninguna historia:

git branch -d crazy-experiment

No obstante, si la rama no se ha fusionado, el comando anterior mostrará un mensaje de error:

error: The branch 'crazy-experiment' is not fully merged.
If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Esto te protege ante la pérdida de acceso a una línea de desarrollo completa. Si realmente quieres eliminar la rama (por ejemplo, si se trata de un experimento fallido), puedes usar el indicador -D mayúscula:

git branch -D crazy-experiment

Este comando elimina la rama independientemente de su estado y sin avisos previos, así que úsalo con cuidado.

Los comandos anteriores eliminarán una copia local de la rama. La rama seguirá existiendo en el repositorio remoto. Para eliminar una rama remota, ejecuta estos comandos.

git push origin --delete crazy-experiment

O

git push origin :crazy-experiment

Enviarán una señal de eliminación al repositorio en origen remoto que activa la eliminación de la rama remota crazy-experiment.

Resumen


En este documento, hemos hablado de la creación de ramas de Git y del comando git branch. Las funciones principales de los comandos git branch consisten en crear, enumerar y eliminar ramas, así como cambiarles el nombre. Para trabajar con otros aspectos de las ramas resultantes, el comando se suele usar con otros distintos, como git checkout. Obtén más información sobre las operaciones de rama de git checkout, como cambiar de rama o fusionar ramas, en la página de git checkout.

En comparación con otros sistemas de control de versiones, las operaciones de ramas de Git son rentables y se usan con frecuencia. Esta flexibilidad permite una profunda personalización del flujo de trabajo de Git. Para obtener más información sobre los flujos de trabajo de Git, visita nuestras páginas de debate ampliadas sobre el flujo de trabajo: el
flujo de trabajo de rama de función
, el flujo de trabajo de Gitflowel flujo de trabajo de bifurcación

¿Listo para probar las ramas?

Prueba este tutorial interactivo.

Comienza ahora