Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Add a Heroku remote to an existing git repo

Working with git remotes on Heroku

Generally, you will add a git remote for your Heroku app during the Heroku app creation process, i.e. heroku create. However, if you are working on an existing app and want to add git remotes to enable manual deploys, the following commands may be useful.

Adding a new remote

Add a remote for your Staging app and deploy

Note that on Heroku, you must always use master as the destination branch on the remote. If you want to deploy a different branch, you can use the syntax local_branch:destination_branch seen below (in this example, we push the local staging branch to the master branch on heroku.

$ git remote add staging https://git.heroku.com/staging-app.git
$ git push staging staging:master

In some cases, your local branch may be missing some commits that were already deployed to Heroku, resulting in an error. If you are very sure you want to proceed, add the --force (-f) flag.

$ git push staging staging:master -f

Add a remote for your Production app and deployu

By convention, the remote name "heroku" is typically used for the production application.

$ git remote add heroku https://git.heroku.com/app.git
$ git push heroku master

Add a remote via Heroku CLI

As @voke points out, you can alternatively use a Heroku CLI command to add your remote. However, it looks like this will always use the default remote name heroku for the remote. If you would like to use a different name for your remote, see the "Rename a remote" section below.

$ heroku git:remote -a staging-app

Edit: Thanks to @nruth for pointing out you can supply a remote name to this command with the -r flag.

$ heroku git:remote -a staging-app -r staging

Add a remote using the SSH protocol

As @Saworieza points out, all of the examples above use the https protocol for connecting to the remotes, but it is also possible to connect via ssh.

$ git remote add staging git@heroku.com:staging-app.git
$ git remote add heroku git@heroku.com:app.git

Other useful commands

List your git remotes

$ git remote -v

Rename a remote

$ git remote rename heroku staging

Change a remote URL or protocol

If you have already created https remotes and want to switch them to use ssh, the following command can be used. This command can also be used to change the target URL without changing the protocol

$ git remote set-url staging git@heroku.com:staging-app.git
$ git remote set-url heroku https://git.heroku.com/production-app.git
@theochampion

This comment has been minimized.

Copy link

theochampion commented Jun 12, 2018

Thanks for the gist! Quick question tho, when I do that and then git push heroku master nothing is pushed to heroku:master and the build threfore fail, what step I am missing here ?

@Saworieza

This comment has been minimized.

Copy link

Saworieza commented Dec 13, 2018

Hi. I found that this method is slightly misleading.
git remote add heroku git@heroku.com:app-name.git
works much better. doesn't add two apps to your remote and is straightforward

@voke

This comment has been minimized.

Copy link

voke commented Nov 11, 2019

Another way is to run heroku git:remote app-name

@randallreedjr

This comment has been minimized.

Copy link
Owner Author

randallreedjr commented Nov 22, 2019

@theochampion Sorry, I just saw your question. You probably already figured out the solution, but in case anyone else comes here with the same question, my guess would be that your local branch doesn't have any new commits, so there's nothing to push to Heroku.

@nruth

This comment has been minimized.

Copy link

nruth commented Jan 17, 2020

heroku git:remote -a your-staging-app-name -r staging then it doesn't overwrite heroku

@randallreedjr

This comment has been minimized.

Copy link
Owner Author

randallreedjr commented Jan 17, 2020

@nruth nice tip, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.