Buenas prácticas de ramificación / rebase de Git

Tengo un siguiente escenario:

3 twigs:
– Maestro
– MyBranch se separó de Master con el propósito de desarrollar una nueva característica del sistema
– MyBranchLocal se bifurcó en MyBranch como mi copy local de la sucursal

MyBranch está siendo reescrito y promovido por otros desarrolladores (que están trabajando en la misma function que yo).

Como propietario de la twig MyBranch, quiero mantenerlo sincronizado con Master mediante el rebasamiento. También necesito fusionar los cambios que realizo en MyBranchLocal con MyBranch.

¿Cuál es una buena manera de hacer eso?

Un par de escenarios posibles que probé hasta ahora:

YO.
1. Confirmar cambio a MyBranchLocal
2. Rebase MyBranch contra Master
3. Rebase MyBranchLocal contra MyBranch
4. Combinar MyBranch con MyBranchLocal

II.
1. Confirmar cambio a MyBranchLocal
2. Combinar MyBranch con MyBranchLocal
3. Rebase MyBranch contra Master
4. Rebase MyBranchLocal contra MyBranch

III.
1. Confirmar cambio a MyBranchLocal
2. Rebase MyBranch contra Master
3. Combinar MyBranch con MyBranchLocal
4. Rebase MyBranchLocal contra MyBranch

Ya sé que el escenario III parece estar arruinando mucho el historial de confirmaciones, lo que podría duplicar las confirmaciones.

¿Cuál es tu experiencia? ¿Qué escenarios recomienda para minimizar el esfuerzo de fusión y mantener limpio el historial?

Mi sugerencia personal Esta se centra en tener un historial de compromisos directo, y fallar en las twigs "más específicas" (es mejor que desordere su sucursal local que la twig de características).

  1. Confirmar cambio a MyBranchLocal
  2. Rebase MyBranchLocal contra MyBranch
  3. Fusionar MyBranch con MyBranchLocal (debe avanzar) – MyBranch = Local
  4. Rebase MyBranch contra Master
    1. (opcional) Merge Master con MyBranch (también debe avanzar)
  5. Rebase MyBranchLocal contra MyBranch

Encontré esta pregunta después del enlace al correo electrónico de Linus . De acuerdo con el correo electrónico, no debe volver a establecer la base una vez que haya publicado su historial en algún sitio público, ya que podría destruir el historial de otras personas. Entonces, rebase para MyBranchLocal está bien, pero para MyBranch (compartido con otros desarrolladores) no lo es.