My team is currently using Visual Studio Team Services for source control (TFS), building (triggered on check-in), and deploying (using VSTS Release Management).
We have four environments (Dev, QA, Int, & Prod), and any code change has to be signed off (by different parties for each environment) before being deployed to the next.
At the moment, whenever any changes are deployed to a downstream environment, everything from the upstream environment goes at once; I've successfully convinced both the team & management that this needs to change.
Of course, that means it's on me to figure out how to change it. I pitched feature branches, but since we're on TFS the team is pushing back on that as too heavyweight; I floated migration to git, which management has agreed to in principle but deferred to an undefined point in the future.
Without changing our source control from TFS, changing our build & release from VSTS, or implementing feature branches, how can we selectively promote code changes through the pipeline of environments?
Update: Based on comments, my goal is apparently vague so I'll try to clarify. I would like to, within our current infrastructure, be able to deploy an arbitrary subset of what is in a given environment to its successor.
For example, assume that there are 5 items in the QA environment that have not yet been deployed to Int, and that the testers sign off on the 2nd & 5th ones (based on check-in order) but the 1st, 3rd, & 4th have defects. How can we deploy only the two signed-off changes to Int without also deploying the three defective ones?