git: fusión de twigs de características en una parte anterior de la línea maestra

Estoy seguro de que esto se ha preguntado antes, pero ni siquiera estoy seguro de cuáles son los términos que estoy buscando.

Tengo una estructura de twig que se ve así:

startoftime -> A -> B -> C -> D (master head) | -> X -> Y (feature1 head)(tag T) | -> Q -> R (feature2 head) 

Básicamente, creé dos twigs de características a partir del compromiso B y desarrollé en ellas. El encabezado de uno de ellos tiene una label que refleja su historial general desde la raíz original. Ahora quiero volver a convertirlos en maestros, pero idealmente me gustaría que aparezcan en la historia antes de las cosas nuevas en el maestro, no después, dejando la cabeza maestra actual donde está. Idealmente me gustaría esto:

 startoftime -> A -> B -> X -> Y -> Q -> R -> C -> D (master head) | (tag T) 

¿Cuáles son los conceptos o commands que debería mirar aquí?

Hay una sugerencia de que la rebase podría ser lo que busco aquí. Estas tres twigs ya se han transferido a mi control remoto, aunque puedo garantizar que nadie más que yo se haya alejado de él / lo haya comprobado. ¿Todavía puedo usar rebase?

Gracias.

Las rebases no son un problema, siempre y cuando nadie más haya usado tus twigs. No importa si es "remoto" o no. Tendrás que usar --force la próxima vez que hagas un push.

Una vez dicho esto, me gustaría animarlo a reconsiderar el uso de una combinación. Su historial seguirá mostrando la línea de time de las características que se desarrollaron, pero también reflejará con mayor precisión la historia de usted trabajando en paralelo, así como también cuando lo integró en su twig principal. Si haces una rebase, tu Q actual será diferente de Q cuando estuviste trabajando originalmente en ella, posiblemente hasta el punto en que no funcione como esperas si alguna vez tienes que volver a ella. Además, facilita la eliminación de feature1 o feature2, en caso de ser necesario por algún motivo.

Para ser completo (y estoy de acuerdo con la respuesta de karl Bielefeldt ), una solución que use rebase sería:

 git checkout feature2 git rebase feature1 git checkout master git rebase --onto feature2 BD 

( Vea aquí un ejemplo de git rebase --onto )