I like using this workflow.
Basically, you normally commit to develop
branch. Merges into master
indicate stable releases. So whenever you merge into master, have a hook pulling from the master
branch on the staging repo to the master
branch on the production repo.