Cambiar fuente de compromiso

Tengo la siguiente estructura:

ABCD (branch-C) \ \ \ H (branch-A) \ \-EFG (branch-B) 

Me gustaría esto:

 ABCD (branch-A and branch-C) \ \ \ \-EFGH (branch-B) 

¿Cómo hago esto?

Suponiendo que tiene sucursal B desprotegido:

 git cherry-pick branch-A git push . branch-C:branch-A -f 

Ahora tiene la opción de eliminar la twig A o la twig C, o simplemente conservar ambas.

 git checkout branch-B git cherry-pick branch-A # you could also specify H directly 

Ahora tienes H encima de G.

 git checkout branch-A git reset --hard HEAD^ # you could also specify D directly # HEAD is the current commit; HEAD^ is the previous one 

Ahora eliminaste H de la twig que contenía ABCD.

Tenga en count que esto solo tiene sentido si hay alguna twig ref que apunte a H y G al inicio, ya que un object de confirmación en git incorpora sus antecesores; "mover" un compromiso no significa nada en la medida en que cambie tus twigs.