¿Cómo dividir una confirmación en el medio del historial de una sucursal?

Imaginemos que tengo la siguiente twig:

A -- B -- C -- D -- E ^(HEAD, master*) 

Necesito dividir el B en H y J:

 A -- H -- J -- C' -- D' -- E' ^(HEAD, master*) ' means hash of C, D and E will be updated 

Estas forms no son adecuadas:

 git rebase -i HEAD~3 #or git reset --mixed HEAD~3 

Porque la situación real es que el objective commit (B) es ~ 200 commits antes que el HEAD de la twig master. Entonces no quiero enumerarlos todos en modo interactivo. No hay problemas con el control remoto, porque es solo untracked local / branch de tema y quiero aprender cómo hacer varias manipulaciones del historial de commits.

Lo que probé:

 git checkout B #detached HEAD mode git reset HEAD^ # here I split B into two logically separated commits H and J git rebase -i --onto HEAD master #? here I have no idea what to do next # I also tried this: git rebase -i HEAD~4 HEAD~2 # but the result is detached mode and no idea what to do next again 

¿Algunas ideas? Por favor, no tengo un buen conocimiento de git así que sería genial si alguien pudiera explicar esto paso a paso.

Después de que git reset HEAD^ en tus pasos obtienes B commit staged encima de A.

Usted realiza su split, generalmente agregando files, opcionalmente en modo interactivo, donde puede dividir los cambios en un file en una confirmación separada (ver git add -i ).

Cuando haya terminado con su split y haga que su J se comprometa, restale el rest del historial a la parte superior:

 git rebase --onto JBE 

lo que significa que la reproducción se compromete comenzando (pero excluyendo) B y a (inclusive) E en la parte superior de J.