Git de branchement à partir d'une branche de fonctionnalité pour travailler sur une sous-fonctionnalité

12

Nous sommes actuellement dans la situation suivante, où une branche de fonctionnalité a été branchée pour une branche de sous-fonctionnalité (comme, travailler sur des choses backend et frontend pour la même fonctionnalité):

o 
|
o development
|\
| o feature-a
| |
| o
| |\
| | o feature-a-sub
| | |
| | |
|  \
|   o merged feature-a into feature-a-sub
|  /
o feature-a-sub merged into development
| |
| o feature-a with future work on it
|
o development

Un développeur a d'abord fusionné feature-a dans sa branche feature-a-sub pour être à jour, puis a fusionné sa fonctionnalité-a-sub dans le développement. Alors que la branche initiale de la fonctionnalité-a existe toujours et n'est pas encore terminée.

À mon point de vue, cela pose le problème du fait que la branche feature-a est maintenant rendue obsolète, car toutes les modifications sont fusionnées en feature-a-sub puis en développement. De plus, le travail s'est poursuivi sur la fonction-a, ce qui entraîne de futurs conflits de fusion et de nombreux travaux manuels.

Où avons-nous pris le mauvais virage et à quoi ressemblerait un flux de travail correct avec moins de problèmes?

pduersteler
la source

Réponses:

14

L' un devrait seulement fusionner pour et de la branche mère. Car feature-a-subce n'est feature-apas le cas development.

La fusion avec la branche grand-parent signifie que la raison pour laquelle la branche parent a été créée n'a pas été remplie, et oui, comme indiqué, cela crée des problèmes futurs où le développement se poursuit feature-aet developmentconduisant à une divergence accrue des lignes de code et à davantage de conflits dans le route.

Cela supposait que cela feature-a-subdépendait du code dans feature-a. Si feature-a-subétait à la place indépendant de feature-a, il n'aurait pas dû être ramifié du feature-atout et aurait dû être ramifié (et fusionné) dans development.

Si feature-anécessaire feature-a-subpour travailler (je ne suis pas sûr qu'il ait fait un feature-atravail continu sans fusion de feature-a-subcelui-ci), et feature-a-subétait indépendant de feature-a, feature-a-subaurait plutôt dû être feature-bavec une branche de development, une fusion en arrière development, puis soit une fusion de developmentou feature-b(si on ne le fait pas je ne veux pas prendre d'autres changements du développement) dans feature-a.

Le workflow doit être soit:

o                                        
|                                        
o development                            
|\                                       
| o feature-a                            
| |                                      
| o                                      
| |\                                     
| | o feature-a-sub                      
| | |                                    
| | |                                    
| | |                                    
| | o merged feature-a into feature-a-sub
| |/                                     
| o feature-a-sub merged into feature-a  
| |                                      
| o feature-a with future work on it     
|                                        
o development 

ou

o                                                  
|                                                  
o development                                      
|\                                                 
| \                                                
|  \                                               
|   o feature-a                                    
|\  |                                              
| b | feature-b                                    
| | |                                              
| | |                                              
| | |                                              
| b | feature-b complete                           
|/ \|                                              
o   o feature-b merged to development and feature-a
|   |                                              
|   o feature-a with future work on it             

Connexes - une de mes lectures préférées sur la philosophie de la branche: Stratégies avancées de branche SCM . Bien que le livre blanc cible les systèmes de contrôle de version centralisés, les idées derrière les rôles que chaque branche peut jouer sont importantes pour s'assurer que vous comprenez ce qui se passe et que vous pouvez raisonner sur ce qui devrait être fait ensuite avec une branche donnée.


la source