FeaturedNOTICIAS

Cómo actualizar y mantener ramas separadas de Git – CloudSavvy IT


Una de las principales características de Git es la capacidad de crear múltiples versiones de su proyecto. A menudo, estos se utilizan para bifurcaciones a corto plazo llamadas «ramas de funciones», que se fusionan en maestros. Sin embargo, a veces es necesario tener ramas realmente separadas, lo que dificulta mantenerlas sincronizadas.

¿Por qué mantener diferentes ramas?

Por lo general, las ramas son de corta duración y están destinadas a fusionarse en la rama de versión principal. En algunos casos, sin embargo, es necesario mantener las ramas completamente separadas. Por ejemplo, puede tener ramas dirigidas a diferentes plataformas o dependencias, con diferente funcionalidad, o simplemente ramas de lanzamiento separadas que mantiene activas por un tiempo.

Este es el mismo flujo de trabajo con la mayoría de las bifurcaciones y, según la cantidad y la gravedad de los cambios, puede ser difícil mantener la sincronización con el flujo ascendente. Si sus dos sucursales están en gran parte sincronizadas menos algunas confirmaciones, tendrá mucho más tiempo para administrar conflictos y mantener las cosas actualizadas.

Sin embargo, en la mayoría de los casos, debe buscar alternativas a tener que separar las ramas, ya que puede volverse bastante tedioso, especialmente con los conflictos de fusión y todas las pruebas adicionales. Por ejemplo, si tiene dos compilaciones dirigidas a diferentes plataformas, muchos lenguajes tienen una configuración de compilación y preprocesadores que pueden manejar esto. C# tiene #if NETVERSION, que permite cambios de código en función de la plataforma para la que se compila.

Sea cual sea el motivo, este es un buen flujo de trabajo de Git que mucha gente usa.

Mantenga las ramas sincronizadas con el revestimiento.

Hay básicamente dos opciones sobre cómo proceder. El primer método y el más común es el rebase, que es muy similar al yeso pero permite que las ramas sean completamente independientes.

Puede pensar en las confirmaciones de Git como una cadena de cambios que retroceden en el tiempo, cada uno de los cuales apunta a la confirmación anterior. Cuando creas una nueva rama, se separa de la principal master rama en un punto específico, el base de la rama

El rebase básicamente está levantando todo feature rama y moverlo a un nuevo punto en el tiempo, donde su final apunta a una cadena de confirmación diferente. Esto es muy útil si la rama bifurcada contiene solo unas pocas confirmaciones, ya que los conflictos de fusión serán más fáciles de resolver. En este ejemplo, la reorganización de esta rama incorpora las confirmaciones B y C, pero no D y E, ya que no es necesario reorganizarla en la rama HEAD.

Sin embargo, el cambio de base se usa comúnmente solo para sucursales locales y presenta algunos problemas cuando se usa con sucursales compartidas. Las confirmaciones en realidad no se mueven; se copian, lo que da como resultado nuevos ID de compromiso, con la rama HEAD movida a la nueva ubicación.

Esto significa que las confirmaciones antiguas se dejan bloqueadas. Dado que Git es un sistema de control de versiones descentralizado, es posible que sus colegas tengan confirmaciones no enviadas que hagan referencia a las confirmaciones eliminadas. El cambio de base deberá ser algo que coordine con todos los colaboradores, y si alguien tiene algún conflicto, deberá resolverlo localmente copiando esos cambios en la ubicación correcta.

Revestir una rama es bastante fácil. Tendrás que comprobar el feature sucursal, extraiga todos los cambios desde el control remoto, luego ejecute rebase <branch> para mover el feature rama en la rama de destino.

git checkout feature
git pull
git rebase master

Es probable que esto genere conflictos de fusión, que deberá resolver usted mismo y luego confirmar los cambios.

Si bien la mayoría de las tareas diarias de Git se pueden realizar con bastante facilidad desde la línea de comandos, el cambio de base es, por naturaleza, una operación bastante visual, por lo que recomendamos usar un cliente de GUI de Git como Fork o GitKraken si es posible. Esto le mostrará las ramas y lo ayudará a planificar la reorganización de manera más efectiva e incluso puede realizar reorganizaciones interactivas.

Debido a que el reajuste básicamente aplica todas las confirmaciones de la rama de función a una nueva ubicación, no necesita incluirlas todas, y el reajuste interactivo puede eliminar confirmaciones innecesarias. Puede hacer esto desde la línea de comando, pero tiene más sentido desde una GUI.

Corrección de commits no deseados

¿Qué pasa si no quieres incluir algunas confirmaciones cuando rebase? Si tienes compromisos por tu cuenta feature rama en la que desea excluir durante el revestimiento master, entonces puedes hacer una reorganización interactiva. Esto eliminará las confirmaciones no deseadas durante el rebase, esencialmente eliminándolas del historial.

Pero es mucho más probable que haya compromisos en master sucursal que preferirías no tener en la tuya feature rama. Dado que el reajuste establece la base de la nueva rama para dominar, no hay forma de no incluir esos compromisos.

Si solo hay una o dos confirmaciones que le gustaría no tener, probablemente aún pueda reorganizarlas y solucionarlas en el conflicto de combinación, corregirlas manualmente o simplemente revertir la confirmación. Git tiene un comando «revertir» que aplicará los cambios opuestos, esencialmente revirtiendo una confirmación y haciendo que parezca que nunca sucedió. Para usarlo, ejecuta git log para encontrar la confirmación que desea restaurar:

Luego, copie el hash SHA1 y revierta la confirmación:

git revert 62ee517cc7c358eafbbffdebdde1b38dea92aa0f

Esto creará una «compromiso de reversión» en feature rama.

La recolección de cerezas se compromete con otra sucursal

El último escenario con el que te puedes encontrar es si solo hay unas pocas confirmaciones de master que le gustaría tener en feature. Esto es común si está manteniendo sucursales para diferentes versiones, porque a menudo hay revisiones y parches que deben aplicarse a versiones anteriores del software.

Sin embargo, este es el método más molesto para sincronizar cosas, porque si no mantiene sus ramas sincronizadas al menos de alguna manera, existe una gran posibilidad de que la confirmación que desea incluir sea incompatible con la rama anterior.

Pero Git tiene herramientas para copiar y pegar esencialmente confirmaciones en una rama diferente. Esta acción se llama selección selectiva, porque está seleccionando una sola confirmación del historial y eliminándola. De forma similar al rebase, la selección selectiva crea nuevas confirmaciones copiadas, pero Git suele ser lo suficientemente inteligente como para solucionarlo, incluso si tiene que fusionar las ramas más adelante.

Para elegir la guinda, deberá obtener la ID de confirmación. Si el historial de tu sucursal es complicado, puedes hacerlo git log con el --graph opción para obtener una representación visual del historial, aunque un cliente GUI es particularmente útil para tareas como esta.

git log --pretty=format:"%h %s" --graph

Entonces, asegúrate de estar en feature bifurcarse y correr cherry-pick con el ID commit para copiarlo.

git checkout feature
git cherry-pick 1da76d3

Esto podría causar conflictos, que deberá resolver.

TE INTERESA>>  Gobierno de México prepara campaña contra la adicción a los videojuegos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba