¿Puedo fusionar una sucursal del futuro en una confirmación en el pasado sin combinar las confirmaciones compartidas entre ellas, o sin una selección inteligente?

Digamos que tengo una label, v1.5 . Se realizaron más confirmaciones y se creó otra fix bifurcación en un punto anterior a la label v1.5 .

Ahora que se ha realizado la corrección en la fix , debe aplicarse a la versión publicada del código representado por la confirmación labelda en 1.5 .

¿Es posible, sin usar git-cherry-pick , fusionar un gran set de commits de fix en un punto dado de la historia?

 o ... (history) | o tag v1.5 | o (can not have in v1.5) | o (can not have in v1.5) | o (can not have in v1.5) |\ | \ (`fix` branch) | \ | o (needed at v1.5) o | -(can not have in v1.5) | o (needed at v1.5) | | | o (needed at v1.5) o | -(can not have in v1.5) o (needed at v1.5) 

Sí, esto es posible con rebase en lugar de cherry-pick. El resultado final debe ser el mismo, independientemente de qué método se use.

Primero crea un nuevo nombre para la twig de arreglos para que la twig de arreglos original no se modifique

 git branch fixv1.5 fix 

Luego rebase fixv1.5 en v1.5

 git rebase --onto v1.5 <upstream> fixv1.5 

donde <upstream> debería ser el SHA del compromiso en el que se basó la twig de reparación, es decir, el marcado P en el siguiente diagtwig.

Ahora deberías tener un historial que se parece a:

 o ... (history) | o tag v1.5 | \ | \ A' B' C' D' | ---o---o---o---o fixv1.5 | o (can not have in v1.5) | o (can not have in v1.5) | o (can not have in v1.5) P |\ | \ (`fix` branch) | \ | o (needed at v1.5) A o | -(can not have in v1.5) | o (needed at v1.5) B | | | o (needed at v1.5) C o | -(can not have in v1.5) o (needed at v1.5) D 

Para completar, el uso equivalente de cherry-pick sería

 git checkout -b fixv1.5 v1.5 git cherry-pick <upstream>..fix