We have a branching structure of:
- multiple dev branches for each major new feature
- Main branch, merged into from a dev branch once a feature is ready for testing
- Release branch, merged into from Main once a feature is ready for production
We often have new features completed at around the same time that end up in Main, with some of the same source code changed. Then Feature A may be declared ready for production and need to be deployed, while Feature B requires more work.
Once changes are incorporated in Main, particularly with multiple revisions to Feature A and B, their identity as separate features is lost. It then becomes risky and difficult to promote just one of them to production. We use TFS and I don't know if this is one of its limitations.
What is the best way to resolve this? Should we be using a different branching strategy, or would a DVCS fix it?