Cambiar la sucursal de Git Parent

Digamos que tenemos una estructura de ramificación como:

develop -> --- a --- b --- c \ \ feature 1 -> \ --- d --- e \ feature 2 -> --- f --- g 

Después de trabajar en la característica 1, decidí que realmente debería haberse ramificado como una subtarea de la function 2.

¿Hay alguna manera de que la característica 1 "desvíe" la ramificación del desarrollo y se desvíe de la function 2 en su lugar, manteniendo sus compromisos?

Ejemplo:

 develop -> --- a --- b --- c \ feature 1 -> \ --- d --- e \ / feature 2 -> f --- g 

La solución más simple sería usar rebase con --onto flag, como se describe en el libro de Git . El command:

 git rebase --onto feature2 develop feature1 

Volverá a la base las confirmaciones de la característica 1 que no se encuentran en el develop de la feature2 .

Normalmente, verás git rebase para este tipo de cosas, pero no va a funcionar porque una rebase de feature1 en feature2 includeía commits byc, que no deseas.

La sugerencia de Willem de usar cherry-pick es probablemente el path a seguir.

Crea una nueva twig:

 git checkout -b feature1b feature1 

Cherry escoge los commits de interés (aquí estoy diciendo "los dos últimos commits de feature1", pero puedes especificar el range de commits utilizando los identificadores de commit actuales, etc.):

 git cherry-pick feature1~2..feature1 

En este punto, la feature1b coincide con su historial deseado. Puede realizar una limpieza opcional, según sus necesidades:

Eliminar la twig anterior:

 git branch -D feature1 

Renombra la nueva twig:

 git branch -m feature1