¿Cómo volver a establecer la base de un montón de requestes de extracción encadenadas?

¿Cómo puedo networkingistribuir limpiamente un montón de requestes de extracción que se bifurcaron entre sí?

Tengo 3 requestes de extracción que están "encadenadas" entre sí ( A , B , C ), todas desde un punto limpio de maestro. es decir, después de que hice la twig remota A , hice algunos cambios desde A hasta una nueva twig B Hice una request de extracción en la diferencia entre las dos twigs y la llamé request de extracción B

desde entonces, el Maestro ha cambiado (presumiblemente).

la request de extracción A es la "más cercana" al maestro actual, ya que es muy probable que los cambios desde allí sean reubicables fuera del maestro. Pero necesito hacer algunas modificaciones a A y actualizar mi request de extracción (desde la revisión del código). Supongo que puedo volver a calcular fuera de master fácilmente con la twig de request de extracción A

¿Qué sucede cuando trato de volver a reubicar B en el Master '(que tiene cambios desde A )? ¿Se supone que primero debo elegir de la actualización A ? ¿Cómo selecciono adecuadamente los cambios de A (que B no tiene) de manera que B luego puede volver a basarse en maestro?

Al final del día, solo quiero los cambios A (junto con los nuevos cambios), B , C B basado en el maestro para que la historia del maestro esté limpia. ¿Cuál es la mejor manera de hacer esto?

(No dude en corregir mi terminología, no creo que "rebase en master" sea correcto. Solo trato de decir que quiero repetir mis cambios en master cuando digo "rebase en master")

Entonces, creo que así es como has configurado tus twigs, pero corrígeme si esto está mal:

  master-with-new-commits / / master-old - A - B - C 

Dijiste que querías volver a establecer la base A en el master , y luego propagar eso a través de la cadena de twigs, ¿es correcto? Si es así, entonces simplemente usa rebase varias veces para cada twig, rebase cada una sobre su padre rebasado, así:

 git rebase --onto <new-base> <old-base> <branch> git rebase --onto master-with-new-commits master-old A git rebase --onto new-A A@{1} B git rebase --onto new-B B@{1} C 

La syntax de branch@{1} en este caso simplemente significa el estado de la branch en su primera position anterior, es decir, antes de que fuera rebasada (suponiendo que las rebases se aplicaran limpiamente y no tuvieran ningún conflicto). Si hubo conflictos, puede simplemente usar la confirmación de las bases antiguas para cada twig en lugar de la syntax branch@{1} .

Después de haber hecho todo el rebasamiento, debe tener lo siguiente:

  master-with-new-commits - new-A - new-B - new-C / / master-old - A - B - C 

Aparentemente, todo lo que necesitas hacer es … hacer cambios en el contenido de tu corazón en A rebase el maestro de la nueva twig A y vuelva a fusionar todo esto en el maestro (–no-ff).

luego rebase master desde B , y los cambios están en !! git realiza una combinación de 3 vías muy ingeniosa cuando se reproducen los cambios. por lo que es increíblemente fácil tener todos los cambios que desee de la nueva A y de la derivación B o B nueva.

repita los pasos según sea necesario.

si te git rebase --skip commits duplicates, solo hazlo git rebase --skip como te dice 🙂