Problema de flujo de trabajo de Git. Eliminar una twig fusionada de otra twig

Tengo una twig de características que se ha fusionado varias veces con una twig de desarrollo en las últimas semanas. Antes de fusionarlo con la twig principal, queremos eliminar el código de sucursales de funciones que se ha fusionado en la twig de desarrollo en las últimas semanas. ¿Hay una forma unificada de hacer esto?

Las fusiones se crearon con –no-ff, por lo que las confirmaciones en la nueva twig deberían tener sus propios objects.

_______ master ______________________________ \ / \ / \__hofix-1_____C/ \ _ development _______________________\____________ \ / / / \ / / / \_feature-test__A/_________B/________D/ 

Por lo tanto, quiero eliminar las confirmaciones fusionadas A, B y D del desarrollo, mientras sigo conservando la revisión-1, fusiono C y sigo trabajando en la twig de características.

Si entiendo tu situación correctamente, no creo que necesites nada tan pesado como rebase, revertir y cosas por el estilo. Simplemente puede hacer esto:

  1. mira a través del logging de desarrollo para encontrar el hash de confirmación justo antes de fusionar A, y crea una nueva twig llamada "new-dev":

    git checkout -b new-dev somecommithash

  2. ahora se fusiona en C desde la twig hotfix-1:

    git merge C

… y tu estas listo. La twig new-dev ahora tiene los contenidos de desarrollo, fusionados con C, less AB y D.

Si ahora desea hacer que la twig de desarrollador señale al mismo lugar que la twig de nuevo desarrollador, eso es tan simple como:

 git branch -f developer new-dev 

Pero para mayor security, es posible que desee marcar la location anterior de la twig de desarrollador con una label o una twig antes de moverla a la fuerza a la nueva location.

La pregunta es algo borrosa. ¿Tienes una twig de desarrollo y quieres unir varias fusiones entrantes, dejando el rest? Si es así, puede usar rebase -i -p con un punto bajo, eliminando las rebase -i -p fusión de la list de rebase -i -p pendientes. Tenga en count que volverá a verificar todas las confirmaciones de las que ha sacado cosas, ya que el próximo trabajo podría basarse en ellas.

Otro enfoque es usar git revert en la parte superior para los cambios no deseados. Obtiene el resultado final, pero es probable que te deje con un historial de mala calidad.