rebase mientras mantiene la fusión de la historia

El flujo de trabajo de git que más me gusta es rebase a establecer la rebase todo antes de comprometerme a master , pero también utilizar git merge --no-ff para crear un historial que tenga fragments de trabajo legibles e identificables y detalles finos dentro de esos fragments de trabajo .

Usar --no-ff da un historial que se ve así:

 | |\ | \ | |FeatureA.InterestingStep1 | |FeatureA.InterestingStep2 | |FeatureA.InterestingStep3 | |FeatureA.InterestingStep4 | |FeatureA.InterestingStep5 | / |/ |FeatureA |\ | \ | |FeatureB.InterestingStep1 | |FeatureB.InterestingStep2 | |FeatureB.InterestingStep3 | / |/ |FeatureB 

Eso está bien.

Lo que es una pena es que si trato de rebase esto, entonces pierdo la estructura.

Supongamos que he terminado mi trabajo, he buscado, re-establecido, he limpiado los conflictos de fusión, he limpiado mi historial local de commits desorderados para ser los commit finales (aún múltiples) que quiero en master y he creado la estructura necesaria --no-ff .

Luego presiono, pero alguien más en el equipo me ha golpeado hasta el golpe y el origen \ master se ha movido. Si rebase, entonces la estructura -no-ff desaparece y me queda una secuencia de confirmación lineal.

Volver a crearlo no es el fin del mundo, pero ¿hay alguna manera de volver a establecer la base sin perder la estructura?

Lo que desea es la opción -p (o --preserve-merges ) de rebase que conserva las rebase fusión

Del doc :

Vuelva a crear las asignaciones de combinación en lugar de aplanar el historial reproduciendo las confirmaciones que presenta una confirmación de fusión. Las resoluciones de conflictos de combinación o las modificaciones manuales para fusionar confirmaciones no se conservan.

Además de @Francesco También es posible que desee search git pull –rebase, que muchos desarrolladores utilizan. También aplana la historia. La forma de evitarlo es haciendo fetch / rebase manualmente, es decir (estando en master)

git fetch

git rebase --preserve-merges origin/master