I'm not familiar with Play but for my applications I use a basic authentication prompt on them for staging so I know that nothing can be seen whilst I'm working on it or indexed at all.
If you want to use a more traditional git flow your are best with having two Heroku applications and deploy to them from a single git repo using corresponding branches - when you connect your repo to Heroku then name the remotes something like production
and staging
so it's easier to distinguish when you push. (you would probably be used to see git push heroku master
up to this point)
eg
git remote add production <git url of production heroku app>
git remote add staging <git url of staging heroku app>
then your deployment process becomes;
git push staging staging:master
- deploy local staging branch to the staging
remotes master branch
- verify on staging Heroku app
git checkout master
- switch to local master branch
git merge staging
- merge staging into local master
git push production master
- deploy local master to the production
remote
Heroku have also introduced a new feature recently called Pipelines which sounds like it might be of also be a fit here https://devcenter.heroku.com/articles/labs-pipelines.