Reversión de confirmaciones provenientes de varias twigs específicas

Digamos que tengo la twig principal y las twigs de características A, B, C, D y E.

C, D y E se fusionan en B y B se fusiona en maestro.
Todos fueron fusionados con --no-ff en diferentes momentos durante el desarrollo.

En un momento determinado, el cliente decidió que quería soltar las características D y E.
Puedo revisar la list de compromisos y seleccionar manualmente los compromisos que deseo revertir, pero eso requeriría demasiado time y esfuerzo ya que posiblemente haya cientos de ellos.
¿Es posible revertir (en el máster o A) todos los commits que se originan solo en las twigs D y E?

Puedes hacer esto invirtiendo los commit de fusión. Digamos que D se fusionó en B en commit abc123 ; en ese caso, git revert -m 1 abc123 . Haga lo mismo para el compromiso donde E se fusionó en B.

Tenga en count que si desea reintroducir los cambios de D y / o E en el futuro, no podrá simplemente fusionarlos de nuevo; necesitarás revertir los commits creados por los commands de git revert anteriores. En otras palabras, necesitarás "revertir la reversión".

Si tiene dos twigs fusionadas:

  h : merge commit | v ---------*-* B / ----* D 

Puede enumerar las confirmaciones provenientes de D con el siguiente command:

 git rev-list h^..D # h^ means : the first parent of h # x..D means : any commit reachable from D and not reachable from x 

Primero puede verificar visualmente que esta list contiene solo confirmaciones que desea revertir:

 gitk h^..D # or gitg, or git log --oneline --graph ... 

Una de las numerosas forms de deshacer esta list de confirmaciones podría ser:

 # example from branch A : # create a working branch : git checkout -b wip_removing_D # revert the whole list of commits : git revert --no-edit $(git rev-list h^..D) # go back to the target branch : git checkout A # create a single commit which contains all of the reverts : git merge --squash wip_removing_D # delete working branch : git branch -D wip_removing_D