Git merge se compromete a partir de una versión específica de upstream

Escenario: he bifurcado un proyecto github y he comenzado a trabajar en él (después de agregar el proyecto original como un control remoto llamado 'upstream'). Mientras trabajo en mi fork, se realizan varias versiones del proyecto upstream: v1.3-stable, v1.4-stable, v1.5-experimental, etc. Ahora necesito fusionar las confirmaciones upstream con mi twig maestra , pero SÓLO hasta un lanzamiento específico, por ejemplo, lanzamiento v1.4-estable. ¿Cuál es el mejor flujo de trabajo para este escenario?

Suponiendo que v1.4-stable es una label en el control remoto, puede aplicar esos cambios a su repository local llamando a este desde la sucursal que contiene su trabajo:

git fetch git rebase --onto $(git rev-list -n1 v1.4-stable) 

La list de references encuentra el ID de la última confirmación de v1.4-estable, después de lo cual se reproducen las confirmaciones y se coloca su propio trabajo orderadamente en la parte superior. Habrá conflictos si el control remoto ha cambiado significativamente desde que se bifurcó.

Si v1.4-stable es una twig en el control remoto, en su lugar querrás hacer

 git pull --rebase origin v1.4-stable 

Esto supone que v1.4-stable es una label aa para una confirmación que indica la liberación, en la twig principal. Checkout maestro y extraer los últimos cambios:

 git checkout master git pull --rebase 

Luego, rebase su twig de desarrollo además de esta confirmación. Asegúrate de que tu tree de trabajo esté limpio y que HEAD esté apuntando a tu twig dev:

 git rebase v.14-stable 

Este command cambiará la base de su twig para include la v.1.4-stable labelda v.1.4-stable y todas las demás versiones que le preceden.

Antes de rebase:

 o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master \ o---o---o dev 

Después:

 o---o---v.1.2---v.1.3---v.1.4---v.1.5-exp master \ o---o---o dev 

Primero asegúrese de estar trabajando en una twig dedicada para v1.5-experimental .

En segundo lugar, restablezca su twig principal a la versión anterior / v1.4 (asegúrese de que no tiene ningún trabajo en progreso: un restablecimiento completo los eliminaría)

 git fetch upstream git checkout master git reset --hard upstream/v1.4 git push -f 

Finalmente, rebase su twig v1.5-exprimental encima del maestro (que está en la parte superior de la v1.4)

Fist, active rerere (en caso de que tenga que hacer varias rebases más adelante: eso registrará cómo resolver conflictos similares en el pasado)

 git config --global rerere.enabled true 

Luego rebase (vuelva a ejecutar su confirmación desde su twig en la parte superior de v1.4):

 git checkout v1.5-experimental git rebase master git push -f 

Los conflictos que tendrá que resolver solo deberían ser conflictos de interés (modificaciones concurrentes realizadas tanto en la etapa inicial como en la twig experimental).

 git pull --rebase origin v1.4-stable