Flujo de Git: cree una rama de características a partir de otra rama de características

85

Lo he estado usando git flowpor un tiempo. Tengo curiosidad por conocer un caso de uso específico.

Para uno de mis proyectos, tengo un ticket para una nueva función del sitio web. Este ticket depende de muchas subtareas. Me gustaría crear una rama de función para el ticket principal y luego, para cada subtarea, crear una rama de función fuera de la rama de función principal.

Supongamos que tengo un ticket PROJ-500 y creo una rama de funciones para él

git flow feature start PROJ-500

Entonces quiero integrar entradas PROJ-501a través PROJ-515en PROJ-500antes de integrar toda la cosa en develop. ¿Hay alguna forma de hacer algo como

git flow feature start PROJ-511 -b PROJ-500

Luego, con el tiempo, estas subtareas se completan y, cuando finaliza su función, la rama se fusiona en PROJ-500.

git flow feature finish PROJ-511

El comando anterior se fusionaría PROJ-511enPROJ-500

Y una vez que se completen todas las subtareas PROJ-500, se terminarán y se fusionarán en develop.

De esta manera, la nueva función del sitio web se integra en el desarrollo como una sola unidad en lugar de hacerlo por partes.

Pymarco
fuente
¿No lo hace esto? git flow feature start PROJ-511 PROJ-500? El enlace que publicó en el comentario a la respuesta de DerekS sugiere que debería hacerlo.
Paul Hicks

Respuestas:

117

Puede crear una rama de subfunción a través de

git flow feature start PROJ-511 feature/PROJ-500

Pero no puede usar la herramienta GitFlow para fusionar la rama de nuevo en la rama de la función principal porque si lo hace

git flow feature finish PROJ-511

la función se fusionará en develop. Las subfunciones de Ergo no son compatibles , debe hacerlo manualmente.

Alternativas: Sin embargo, el requisito no es nuevo. Existe un problema abierto , así como un proyecto de bifurcación que afirma admitir características de acabado en ramas distintas de develop. También encontré una solicitud de extracción con una implementación de esa función. Es posible que desee probar esa modificación y ver si está satisfecho con ella.


Actualización 2019-12-13: como el usuario Matěj Kříž acaba de mencionar en su comentario, el usuario Tony Chemit ha escrito una respuesta aquí unos meses después de la mía, señalando gitflow-avh como una alternativa al producto gitflow original. Admite subcaracterísticas listas para usar con la sintaxis que se muestra arriba. Han pasado algunos años y hoy en día la edición AVH es parte de la instalación normal de Git para Windows, acabo de verificar esto en mi caja local y probé la opción de subfunción. Es decir, para los usuarios de Windows, simplemente funciona justo después de la instalación de Git.

kriegaex
fuente
1
@pymarco: Gracias por aceptar la respuesta. Sin embargo, tengo curiosidad: ¿has probado alguna de las alternativas? Si es así, ¿cuál y cuál fue el resultado? ¿Funciona como se esperaba? Quizás otros lectores puedan aprender algo de tu experiencia. :-)
kriegaex
Lo siento, pero no he tenido tiempo de volver a esto. Lo intentaré en algún momento.
pymarco
3
¿Por qué el voto negativo? Los votos negativos están destinados a ser utilizados para respuestas descuidadas y mal escritas que no muestran signos de esfuerzo de investigación o conocimiento. Gracias de todos modos.
kriegaex
Si usa la versión de gitflow-avh , busque más abajo en stackoverflow.com/a/29353800/472611 @ tony-chemit answer
Matěj Kříž
11

Como ya se mencionó, podemos iniciar una nueva función usando cualquier rama base con

git flow feature start PROJ-511 feature/PROJ-500

Y para finalizar la función secundaria, podemos cambiar temporalmente la configuración de flujo de git para usar nuestra rama de funciones en lugar de develop:

git flow config set develop feature/PROJ-500 && git flow feature finish PROJ-511

De esta forma, git flow ejecuta todos los comandos y comprobaciones de cordura. Finalmente, para restaurar la configuración, podemos ejecutar

git flow config set develop develop 
César
fuente
9

Actualización (5 de noviembre de 2020): como se indica en la respuesta más reciente aquí , esto es posible con gitflow-avh, que ha reemplazado el flujo de git original.

===================

Respuesta original:

No creo que haya un método para esto en git flow, pero es bastante simple con solo git.

git checkout PROJ-500
git checkout -b PROJ-511
...do your PROJ-511 work...
git checkout PROJ-500
git merge PROJ-511
git branch -d PROJ-511
Derek S
fuente
2
Gracias Derek por responder. Sí, podría seguir ese flujo de trabajo. Pero git flow encapsula una serie de comandos y comprobaciones de cordura que prefiero utilizar para el desarrollo de subfunciones. Por ejemplo, aquí hay un enlace a git-flow-feature - github.com/nvie/gitflow/blob/develop/git-flow-feature
pymarco