J'ai ce scénario que je ne pense pas être rare mais j'ai du mal à trouver un exemple de comment cela est fait correctement sur le net.
Nous avons notre projet, avec une branche principale. Pour mon exemple, disons que l'état actuel de la branche principale identifie la version 1.5.0 du projet.
Maintenant, nous décidons d'écrire la version 2.0.0, pour laquelle des changements massifs et des réécritures vont se produire, des fichiers seront complètement supprimés. Cette réécriture se déroule maintenant sur une nouvelle branche que nous appellerons instable.
Environ une semaine après le début du développement sur instable, une fonctionnalité et/ou une correction de bug doit être ajoutée à la version 1.5.0, pas de problème nous disons nouvelle branche - écrire la fonctionnalité - fusionner avec la branche principale. La branche principale est maintenant à la version 1.6.0.
Maintenant, cette correction/fonctionnalité ne s'applique pas à la nouvelle version du projet car le projet entier est en train d'être réécrit.
Nous terminons la version 2.0.0 sur la branche instable qui était initialement basée sur la version 1.5.0 de la branche principale qui est maintenant, disons... à la version 1.8.4 - comment fusionneriez-vous la branche instable avec la branche principale sans : détruire l'historique des versions de 1.5 à 1.8.4 ou laisser des artefacts des versions antérieures à 2.0.0 dans la branche fusionnée et potentiellement casser le nouveau code écrit dans la version 2.0.0?