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?

  • Can I recover a branch after its deletion in Git?
  • Syncing two GIT branches that only differ by a couple of files
  • Git push trying to push to different branch even though tracked
  • See any Git commits directly to master?
  • How can I delete all local branches which would result in no changes if merged into master?
  • svn:switch doesn't work with relative svn:external?
  • Setting git diff to use diffmerge
  • Which SCM can comfortably handle 90,000 files
  • Git diff: is it possible to show ONLY changed lines
  • Prohibit remote pushing to the master branch in git
  • Gitk can't read treediffs error
  • How to make git diff show the same result as github's pull request diff?
  • 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.


    Say origin‘s url (remote.origin.url) is https://git.example.com/some/repo.git. It is read-only, but you have write access through the ssh-based ‘URL’ git@git.example.com:some/repo.git. Run the following command to effect pushing over the ssh-based protocol:

    git config remote.origin.pushurl git@git.example.com: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 pull and 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 pull will pull from the remote specified by the remote option in the relevant branch section in .git/config, while
    • git push will push to the remote specified by remote.pushDefault.

    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 git@github.com:username/somerepo.git
    

    From what I can gather from the git config man page, the upstream repo is:

    • by default origin
    • set by branch.remote
    • always for both git pull/fetch and git pull

    For a given branch, I don’t see any way to have two separate remote by default.

    Git Baby is a git and github fan, let's start git clone.