One of many methods to realize this workflow is to use a workflow called git flow, see this link for more details.
To summarize, in this workflow you've got a production branch - the master
branch - and a development - the develop
branch. Your developers are creating features based on this develop branch, implementing and testing them and merging them back to the develop branch.
If the feature set is complete for a specific release a new release
branch is created where, for example, the QA can test the new release. After the QA is happy, the branch is merged back to the develop as well as to the master branch, where the client can now get the new working release.
Have a look on the link above for a more detailed explanation.