Git: Correction d'un bug affectant deux branches

16

Je fonde mon dépôt Git sur Un modèle de branchement Git réussi et je me demandais ce qui se passe si vous avez cette situation:

entrez la description de l'image ici

Supposons que je développe sur deux branches de fonctionnalités A et B, et B nécessite du code de A. Le nœud X introduit une erreur dans la fonctionnalité A qui affecte la branche B, mais cela n'est pas détecté au nœud Y où les fonctionnalités A et B ont été fusionnées et les tests ont été effectués avant de se ramifier et de travailler sur la prochaine itération.

En conséquence, le bogue est trouvé au nœud Z par les personnes travaillant sur la fonctionnalité B. À ce stade, il a été décidé qu'un correctif de bogue est nécessaire. Ce correctif doit être appliqué aux deux fonctionnalités, car les personnes travaillant sur la fonctionnalité A doivent également corriger le bogue, car cela fait partie de leur fonctionnalité.

Une branche de correction de bogues doit-elle être créée à partir du dernier nœud de la fonctionnalité A (celle qui dérive du nœud Y), puis fusionnée avec la fonctionnalité A? Après quoi les deux fonctionnalités sont fusionnées pour se développer à nouveau et testées avant de se développer?

Le problème est qu'il nécessite que les deux branches fusionnent pour résoudre le problème. Étant donné que la fonctionnalité B ne touche pas le code dans la fonctionnalité A, existe-t-il un moyen de modifier l'historique au nœud Y en implémentant le correctif et en permettant toujours à la branche de la fonctionnalité B de rester non fusionnée tout en conservant le code fixe de la fonctionnalité A?

Légèrement lié: convention de branchement de bogues Git

Aram Kocharyan
la source
6
Ne pouvez-vous pas simplement corriger le bogue dans la branche «développer», puis le fusionner dans les fonctionnalités A et B?
tdammers
Hmm, il semble que ce serait mieux. Il peut y avoir des conflits de fusion dans la fonctionnalité A, mais je pense que c'est inévitable ici.
Aram Kocharyan
Si vous n'avez effectué aucun développement supplémentaire sur la branche «développement» et que le correctif ne chevauche aucun changement dans la branche «fonctionnalité A», vous n'aurez aucun conflit.
tdammers

Réponses:

24

Utilisez un commit distinct pour corriger le bogue dans une branche, puis choisissez ce commit dans l'autre branche.

Christian Palmstierna
la source
Ça marche bien, bravo.
Aram Kocharyan
5

On peut dire qu'il n'y a pas de bogue dans A ou X. Corrigez le bogue dans la branche B où il a été trouvé. Le correctif se propagera à X et A dans le cours normal des événements.

Kevin Cline
la source
Merci, c'est également possible tant que le bug n'affecte pas la fonctionnalité A.
Aram Kocharyan
0

Bien que ce ne soit pas un workflow populaire dans git, un workflow qui est populaire dans Mercurial serait de mettre à jour vers la révisionX , d'y corriger le bogue (comme X2 ) puis de refaire la fusion Y(qui aurait été une paire de fusions dans Mercurial).

En fait, ce flux de travail est plus facile gitcar après que tout le monde est passé de Yà Y2, les références à l'original Yseront perdues et elles seront finalement récupérées. En hgvous aurait dû enlever manuellement ces commits pour ranger votre dépôt.

Mark Booth
la source