Managing multiple remotes in Git
Following are some quick notes on how to manage using multiple remotes in Git.
What are remotes? §
Remotes specify other repositories to which we can push or pull commits. Before pushing to or pulling from another repository, we must add it as a remote, identified by a name of our choice. By convention, origin
is typically the name for the default remote. Multiple remotes can be defined.
Add a new remote §
Create a new remote named some_org_repo
which identifies the specified repo:
git remote add some_org_repo https://github.com/org_name/repo_name.git
Managing branches to track remotes §
Each branch can have its own remote specified. The remote can be specified when the branch is first created, or can be updated at any later point.
Start tracking a new remote branch §
Create a new branch which tracks branch feature_x
from remote some_org_repo
, and switch to that branch:
git checkout --track some_org_repo/feature_x
Update existing branch to track remote branch §
Update the currently checked out branch to track branch feature_x
from remote some_org_repo
:
git branch -u some_org_repo/feature_x
If you get the following error:
error: the requested upstream branch 'some_org_repo/feature_x' does not exist
hint:
hint: If you are planning on basing your work on an upstream
hint: branch that already exists at the remote, you may need to
hint: run "git fetch" to retrieve it.
hint:
hint: If you are planning to push out a new local branch that
hint: will track its remote counterpart, you may want to use
hint: "git push -u" to set the upstream config as you push.
Assuming you have the branch name correct, this error is probably because you do not yet have a local copy of the remote branch. This may be resolved by running the following and then retrying the command:
git fetch some_org_repo
Pushing and pulling §
By default, pushing or pulling on a branch will push to or pull from that branch’s remote. However, we can explicitly specify the remote in order to override which remote to push to or pull from.
Pushing to the tracked remote §
Assuming the current branch’s remote is some_org_repo
, this will push commits to the remote some_org_repo
:
git push
Pushing to a different remote §
Regardless of what the current branch’s remote is, this will push commits to the remote origin
:
git push origin
Pulling changes from the tracked remote §
Assuming the current branch’s remote is some_org_repo
, this will pull commits from the remote some_org_repo
:
git pull
Pulling from a different remote §
Regardless of what the current branch’s remote is, this will pull commits from the remote origin
:
git pull origin