Cambiar raíz de una twig a otra twig después de Rebase

Yo uso Git para versionar y estoy tratando de lograr algo que no estoy seguro es posible fácilmente. Tengo una característica feature feature1.1 con algunos commits en ella. También tengo una twig que parece estar fuera de la última confirmación de esa function feature1.2 . Esto se debe a que feature1.2 depende de feature1.1 pero no necesariamente debe ser o querer en la misma twig.

Actualmente, cuando restauro la function1.1 termino teniendo que seleccionar cerezamente feature1.2 en una nueva twig creada después de rebase feature1.1.

¿Hay una mejor manera de hacer esto?

Esencialmente, quiero esto

  F feature1.2 / C---D---E feature1.1 / A---B---G---H---I---J---K master 

convertirse en esto

  F' feature1.2 / C'---D'---E' feature1.1 / A---B---G---H---I---J---K master 

Las twigs no tienen raíces.

Bueno, eso es un poco exagerado. La raíz de feature1.1 es commit A Por lo tanto, sería más exacto decir que las twigs no tienen raíces útiles .

Lo que es una twig, es un puntero a una confirmación específica: la característica1.1 señala la confirmación que ha labeldo como E , cuyo hash depende de su contenido y de su historia desde la raíz. Lo que significa que tienes dos commits diferentes , los cuales has labeldo E : uno cuya cadena padre va D , C , B , … y uno que va D , C , K , …

Lo que hace git rebase es copyr commits, a los nuevos que tienen diferentes ID padres hash (y generalmente también diferentes treees base). Los nuevos compromisos son muy parecidos a los anteriores, pero no son lo mismo. Entonces necesitas darles nuevos nombres, como C'-D'-E' por ejemplo.

Los commits antiguos permanecen en su repository por un time (al less 30 días por defecto). Cuando copy CDE a la nueva cadena, eso no afecta la F original.

Ahora necesita copyr F a F' . Un problema puede ocurrir si lo haces ingenuamente, con la git checkout feature1.2; git rebase feature1.1 git checkout feature1.2; git rebase feature1.1 : Git no sabe que ya no debe copyr CDE . Tiene C'-D'-E' que se puede ver en la nueva característica1.1, pero realmente no sabe que estos vinieron de CDE . Si los commits huelen lo suficiente, 1 la rebase nota que ya los tiene y omite copyrlos. Pero si cambiaron lo suficiente durante la primera rebase, los copy nuevamente .

Para evitar que Git siquiera mire la cadena CDE original, necesitas git rebase --onto . O bien, puede utilizar una database interactiva: aquí Git le proporciona un file con el set propuesto de confirmaciones para copyr, y puede eliminar manualmente las que ya están copydas.

Recuerde que cualquiera que tenga sus propias copys de sus confirmaciones originales (con las mismas ID hash que sus originales) retendrá sus copys. Ellos también tendrán que hacer arreglos para comenzar a usar las copys nuevas en lugar de las viejas. Si usted es el único con estas twigs de características, o si todos sus queueboradores están preparados para lidiar con estas rebases, está listo para continuar. Si no, puedes estar creando más dolor del que pueden manejar.


1 En realidad, esto significa "si tienen el mismo git patch-id ".