Different default remote (tracking branch) for git pull and git push
Is there a way to set up a git repository, so that
git pull defaults to one remote and
git push defaults to another? I know I can set both by changing the value of the
remote variable in branch section of
.git/config, but how to do it for each direction separately?
5 Solutions collect form web for “Different default remote (tracking branch) for git pull and git push”
For Git 1.6.4 and later, set
remote.<name>.pushurl with git config.
One might use this to pull using the read-only
https: protocol and push using an ssh-based protocol.
origin‘s url (
https://git.example.com/some/repo.git. It is read-only, but you have write access through the ssh-based ‘URL’
email@example.com:some/repo.git. Run the following command to effect pushing over the ssh-based protocol:
git config remote.origin.pushurl firstname.lastname@example.org:some/repo.git
Since Git version 1.7.0, you can set this with:
git remote set-url --push origin https://your.push.com/blah/
Since Git 1.8.3, you can use the
remote.pushDefault option to do exactly what you want (i.e. having different default remotes for
push). You can set the option just like any other; for example, to set it to the
pushTarget remote, use
git config remote.pushDefault pushTarget
This option will have the following effect:
git pullwill pull from the remote specified by the
remoteoption in the relevant branch section in
git pushwill push to the remote specified by
Note that you need to specify the name of a remote, not an URL. This makes this solution more flexible than the solution involving
remote.<name>.pushurl, because (for example) you will still have tracking branches for both remotes. Whether you need or want this flexibility is up to you.
The release notes say this option was added specifically to support triangular workflows.
This works in 1.7.1 and above –
git remote set-url --push origin email@example.com:username/somerepo.git
From what I can gather from the git config man page, the upstream repo is:
- by default origin
- set by
- always for both
For a given branch, I don’t see any way to have two separate remote by default.