Git merge solo arregla, no se fusiona con otras twigs

Estamos en una situación compleja. Tenemos este rey de repository:

C1 C4 C5 devel *---*---*---*-----------*--------- \_____ \ C2 C3 fix-ie *--*---------*----*----*-------*--- M1 \___ \ testing *----*-------------------------------*--- M2 

Como puede ver, el desarrollo se fusiona dentro de fix-ie branch.

El problema es que la twig "testing" no debe tener commits "devel" (no queremos C1) pero tenemos que fusionar la solución, es decir, en "testing" tener solo commits C2 y C3

Si lo hago:

 git checkout testing git merge fix-ie 

Voy a tener la fusión M1 en mi twig de testing … Así que la confirmación C1 se encuentra en nuestra twig de testing. Eso no es lo que queremos.

¿Cómo evitar esto?

Restring que simplifiqué el ejemplo, hay muchas fusiones, muchos compromisos en nuestro arreglo, es decir, y twigs de desarrollo.

Gracias 🙂

Una forma de hacerlo es crear un fix-ie separado fix-ie twig que excluya las asignaciones de fusión de su twig de devel . A continuación, puede fusionar esa twig a su twig de testing .

Puede search sus reflogs usando git reflog show -all para encontrar sus commits de fusión desde la twig de devel que desea ignorar.

Parece que encontré una solución.

Obteniendo la primera fusión SHA, llamada "123abc" por ejemplo. Puedo hacer:

 git rev-list --no-merges --reverse --topo-order debug-ie ^123abc 

Entonces, cada línea es una confirmación, pero no hay fusión en la list.

Entonces, la forma en que puedo hacer es:

 for SHA in $(git rev-list --no-merges --reverse --topo-order debug-ie ^123abc); do git cherry-pick $SHA done 

Si estoy equivocado, dime … pero parece ser una buena idea.