Bifurcación y combinación de los cambios
Cuando se trabaja en código de Bicep, es normal tener que hacer más de una cosa a la vez. Por ejemplo, estos son dos escenarios para trabajar con el sitio web de la empresa de juguetes:
- El equipo de desarrollo del sitio web quiere su ayuda para actualizar archivos de Bicep con cambios importantes. Pero el equipo no quiere que esos cambios se publiquen todavía. Necesita poder realizar pequeños retoques en la versión activa actual del sitio web en paralelo al trabajo en la nueva versión.
- Está trabajando en cambios experimentales que cree que van a ayudar a mejorar el rendimiento del sitio web. Pero estos cambios son preliminares. No quiere aplicarlos a la versión activa del sitio web hasta que esté listo.
En esta unidad va a obtener información sobre las ramas de Git.
Nota:
Los comandos de esta unidad se muestran para ilustrar conceptos. No los ejecute todavía. Pronto va a practicar lo que aprenderá aquí.
Qué son las ramas
Una rama proporciona una manera de tener varias copias activas de los archivos. Puede crear ramas y cambiar entre ellas siempre que quiera. Cuando haya terminado de trabajar con una rama, puede combinarla en otra. O bien, puede eliminarla, lo que quita todos los cambios.
Es habitual usar ramas para todo el trabajo. Se suele designar una rama como rama principal que representa la versión válida conocida o activa de los archivos. Por convención, esta rama suele llamarse main. Puede crear cualquier número de ramas. Cuando los cambios en una rama estén listos, combine la rama en la rama main.
Creación y extracción de una rama
La creación de una rama en Git resulta rápida y sencilla. Hay varias maneras de hacerlo, pero la más fácil suele ser el comando git checkout
. Este es un ejemplo de cómo crear una nueva rama de nombre my-experimental-changes:
git checkout -b my-experimental-changes
Este comando realmente hace dos cosas: crea la rama my-experimental-changes y extrae del repositorio la rama recién creada. Una extracción del repositorio significa que la copia de los archivos que se ve en la carpeta refleja lo que hay en la rama. Si tiene dos ramas con conjuntos de cambios diferentes, la extracción de una rama y luego de la otra le permite cambiar entre los dos conjuntos de cambios.
También puede cambiar a una rama existente mediante el comando git checkout
. En este ejemplo se extrae del repositorio la rama main:
git checkout main
Nota:
Normalmente debe confirmar los cambios para poder extraer del repositorio otra rama. Git le avisa si no puede extraer del repositorio.
Trabajo en una rama
Después de cambiar a una rama, se confirman los archivos de la forma habitual. De hecho, todo lo que ha hecho hasta ahora ha sido en una rama. Estaba trabajando en la rama main, que es la rama predeterminada al crear un nuevo repositorio.
Si se confirman algunos cambios mientras se ha extraído del repositorio una rama, la confirmación se asocia a la rama. Al cambiar a otra rama, es probable que no vea la confirmación en el historial git log
hasta que combine la rama.
Combinación de ramas
Las ramas son una excelente manera de separar el trabajo en curso de la versión actual activa del código de Bicep. Pero al terminar de realizar cambios en los archivos en una rama, se suele querer combinar los cambios de nuevo en la rama main.
Cuando se trabaja en una rama, se pueden combinar los cambios de otra rama en la actual mediante el comando git merge
.
Nota:
Asegúrese de extraer del repositorio la rama de destino de combinación (a menudo llamada rama de destino) antes de combinar. Recuerde que va a combinar desde otra rama en la rama de trabajo actual.
Este es un ejemplo que muestra cómo extraer del repositorio la rama main y luego combinar los cambios de la rama my-experimental-changes en la rama main. Por último, elimine la rama my-experimental-changes, porque ya no la necesita.
git checkout main
git merge my-experimental-changes
git branch -d my-experimental-changes
Sugerencia
Cuando se trabaja con otras personas, es habitual usar solicitudes de incorporación de cambios para combinar los cambios en lugar de combinar ramas directamente. En breve va a obtener más información sobre la colaboración y las solicitudes de incorporación de cambios.
Conflictos de combinación
Cuando Git combina los cambios de una rama en otra, examina los archivos que se han modificado e intenta combinar los cambios. A veces, es posible que haya realizado cambios en las mismas líneas de código en dos ramas diferentes. En estas situaciones, Git no puede elegir cuál es la versión correcta del código, así que crea un conflicto de combinación.
En este módulo no se analizan en profundidad los conflictos de combinación, pero es importante saber que pueden ocurrir. Y son más habituales cuando se colabora con otras personas. En el resumen de este módulo se proporciona un vínculo a más información sobre cómo ayudan Git y Visual Studio Code a resolver conflictos de combinación.
Flujos de trabajo de Git
En este módulo va a obtener información solo sobre los aspectos básicos de las ramas. Pero las ramas son eficaces y proporcionan flexibilidad en cuanto a la forma de trabajar. Por ejemplo, puede crear ramas a partir de otras ramas y combinar una rama con cualquier otra. Puede usar ramas para crear todo tipo de flujos de trabajo diferentes que permitan al equipo trabajar de la forma que quiera.
En este módulo se usa un flujo de trabajo simple de nombre trunk-based development. Este flujo de trabajo tiene una sola rama trunk. Por ejemplo, en los ejemplos de este artículo se usa main. Esa rama representa la versión válida conocida del código. Puede crear ramas a partir de este tronco al realizar cambios o hacer cualquier trabajo.
El desarrollo basado en troncos desaconseja realizar cambios directamente en la rama del tronco. Intente tener otras ramas alrededor solo durante breves períodos de tiempo, lo que ayuda a minimizar los conflictos de combinación. Luego combine y elimine esas ramas a medida que completa trabajos.
Hay otros flujos de trabajo comunes en entornos de equipo en los que es posible que quiera controlar la frecuencia de publicación de los cambios. En el resumen de este módulo se proporcionan vínculos a más información sobre los flujos de trabajo de Git.