While others have rightfully pointed you to git cherry-pick
, you should understand that "the changeset" might have broader meaning that you might originally maintain.
The thing is, most people, supposedly including you, mean that "the changeset" is the same as "the commit". But it might be more productive to think about features the developers implement, and which got staged, tested, possibly refined and then propagated to the production-ready line of development.
Once you think about features and not changesets, your approach to branching and merging might become less rigid.
You may have each developer/team have a separate branch for each feature or bug fix they're working on. That is, don't develop everything on a single staging branch. Then when a feature/bug fix is ready, that branch gets merged into a testing branch (it might be your single "stage" branch or a separate branch), may be quick-fixed with the fixes cherry-picked back into the branch which changes they fix, and then that branch might be deemed as "ready" merged again — this time into the "production" branch.
Another approach is to have a policy of not having more than a single "feature" branch curently being tested on the "testing" branch, and then when the testing gets finished the testing branch itself might be merged into production branch (Git is fine with repeatable merges).
You might consider reading the "Repositories, branches and documentation" section in this document which details how the development of Git itself is maintained, and this one is considered to be a "go-to guide for Git workflow" by many. Please do not treat these guides as dogmas though — they are there to demonstrate you what approaches people use successfully in production. To contrast, github uses a radically different approach which is also interesting.