 <p>When you run <code>git push heroku master</code> 'heroku' identifies the remote repository you are pushing to. In your case 'heroku' seems to be a reference to your production server. Similarly you probably have an 'origin' remote pointing to github.</p> <p>If you list your git remotes you'll probably see something like this:</p> <pre><code>&gt; git remote -v heroku git@heroku.com:heroku_app_name.git (fetch) heroku git@heroku.com:heroku_app_name.git (push) origin git@github.com:your_github_org/repo_name.git (fetch) origin git@github.com:your_github_org/repo_name.git (push) </code></pre> <p>To push to a different heroku app you can just add that app as a new git remote.</p> <pre><code>git remote add heroku-staging git@heroku.com:heroku_staging_app.git </code></pre> <p>Now you should be able to push to either remote as needed.</p> <pre><code>git push origin master //push to github git push heroku-staging //deploy to staging git push heroku master //deploy to production </code></pre> <p>In general I suggest that you should not be pushing to heroku manually. Hopefully you can have a continuous integration server watch github, run tests whenever you push changes, and deploy to staging only when your automated tests pass. You can then have a manually triggered CI task which pushes whichever commit is currently on staging to production as well (or even automate production deploys as well).</p> <p>You can perform the same configuration using the <code>heroku</code> command line. That also gives you a good way to manage environment variables and other settings on both of your heroku apps: <a href="https://devcenter.heroku.com/articles/multiple-environments">https://devcenter.heroku.com/articles/multiple-environments</a></p>