Dos twigs paralelas en Git, cómo trabajar en "futuro" pero cometer soluciones básicas para "dominar"

Este es probablemente un escenario común, pero hay tantas preguntas sobre flujo de trabajo de Git aquí en SO que no pude encontrar una respuesta para mi pregunta exacta. Cual es:

Tengo un master y twigs future en Git que viven en paralelo. future contiene algunas características futuras mientras que el master es la versión actual (aproximadamente).

Al desarrollar una function en el futuro, a menudo encuentro una situación en la que necesito hacer una corrección que debe pasar a maestro. Qué hago ahora:

  1. Stash trabajo en progreso en el future
  2. Cambiar a master
  3. Reparar el código en el master
  4. Cambiar a future
  5. Combinar desde el master
  6. Stash pop

En algunos casos, donde la solución se testing mejor en la twig future , el process se torna aún más engorroso, consistiendo en realizar el cambio en el future , comprometerlo allí, cambiar a maestro, seleccionar el futuro, verificar el futuro, restablecer el futuro y fusionarse de maestro al final.

Debe haber una manera mejor, pero no puedo resolverlo. Enfoques que no funcionarían (creo, corríjanme si estoy equivocado):

  • Fusión del future al master . No quiero todos los compromisos del futuro en el maestro.
  • Comprometer todo al future y luego seleccionar cuidadosamente ciertos compromisos para master . Esto por sí solo no sería suficiente porque el futuro se fusiona de master a future causaría confirmaciones duplicadas (¿o quizás incluso conflictos?). Tal vez podría crear compromisos opuestos en el future a los elegidos para master pero eso se siente desorderado.

¿Cómo lidian las personas con este flujo de trabajo?

Si está solo desarrollando en la twig future , podría volver a establecer la base sobre el master lugar de fusionar el maestro.

Y desde git 1.8.4 (julio de 2013), git rebase ha aprendido a "autostash": ver esta respuesta .

 git checkout future git rebase --autostash master 

Para el caso contrario, cherry-picking sigue siendo la opción principal.

  1. Stash trabajo en progreso en el futuro
  2. Cambiar a maestro
  3. Reparar el código en el maestro
  4. Cambiar a futuro
  5. Combinar desde el maestro
  6. Stash pop

Debe haber una manera mejor, pero no puedo resolverlo.

Solía ​​hacer ese process, pero después de encontrar que tenía que cambiar de un lado a otro a menudo, cambié a simplemente tener dos directorys de trabajo: uno para trabajar en la twig "principal" y otro para la twig "futura" ("desarrollar" en mi caso). Ambos directorys usaban el mismo repository / origen remoto y los dos directorys operativos también se usaban como controles remotos. Dos directorys eliminaron la necesidad de esconder save / pop antes / después de cambiar de twigs.

Tampoco sentí la necesidad de sacar la solución de maestro a futuro (paso 5) de inmediato, a less que hubiera una razón por la que yo también. Normalmente, terminaría la característica actual para el futuro primero y demoraré la fusión del maestro hasta que sea conveniente.