[git] Changing the Git remote 'push to' default

I want to change the Git default remote branch destination so I could just

git push

Instead of:

git push upstream

Currently this is set to the origin remote and I want to set it to a different remote.

I tried to remove the original (cloned from) remote

git remote rm origin

Which did remove the original remote. But doesn't solve the git push problem. I still get:

fatal: No configured push destination. Either specify the URL from the
command-line or configure a remote repository using...

I also tried to play with:

git remote set-url --push myfork origin

and other options but none seem to work (maybe because I deleted the origin remote too soon?)

Following the answer here I tried to change:

git config push.default upstream (or matching)

but neither worked.

This question is related to git git-push git-remote

The answer is


To change which upstream remote is "wired" to your branch, use the git branch command with the upstream configuration flag.

Ensure the remote exists first:

git remote -vv

Set the preferred remote for the current (checked out) branch:

git branch --set-upstream-to <remote-name>

Validate the branch is setup with the correct upstream remote:

git branch -vv


In my case, I fixed by the following: * run git config --edit * In the git config file:

[branch "master"]
remote = origin # <--- change the default origin here

Just a clarification (using git version 1.7.9.5 on ubuntu 12.04):

Git will add/remove remotes. These are remote instances of git with a server attached.

git remote add myremote git://remoteurl

You can then fetch said git repository like so:

git fetch myremote

It seems this creates a branch named 'myremote', however the remote for the branch is not automatically set. To do this, you must do the following:

First, verify that you have this problem, i.e.

git config -l | grep myremote

You should see something like:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

If you see branch.myremote.remote=. , then you should proceed:

git config branch.myremote.remote myremote
git checkout myremote
git pull

You should now be up to date with the remote repository, and your pulls/pushes should be tied to the appropriate remote. You can switch remotes in this manner, per branch. [Note][1]

According to a The Official Git Config Documentation, you can set up a default push branch (just search remote.pushdefault on that page), however keep in mind that this will not affect repositories/branches which already exist, so this will work but only for new repositories/branches. You should remember that --global will set user-specific repository defaults (~/.gitconfig), --system will set system-wide repository defaults (/etc/gitconfig), and no flag will set configuration options for the current repository (./.gitconfig).

Also it should be noted that the push.default config option is for configuring ref-spec behavior, not remote behavior.

[1]: git branch --set-upstream myotherremote would usually work here, however git will complain that it will not set a branch as its own remote if git branch --set-upstream myremote is used. I believe however that this is incorrect behavior.


If you did git push origin -u localBranchName:remoteBranchName and on sequentially git push commands, you get errors that then origin doesn't exist, then follow these steps:

  1. git remote -v

Check if there is any remote that I don't care. Delete them with git remote remove 'name'

  1. git config --edit

Look for possible signs of a old/non-existent remote. Look for pushdefault:

[remote]
  pushdefault = oldremote

Update oldremote value and save.

git push should work now.


git remote set-url --push origin should work, as you mentioned, but you need to explicitly provide the url instead of an alternative remote name, e.g.

git remote set-url --push origin [email protected]:contributor/repo.git

You can confirm whether this worked by doing a git remote -v. E.g.

? ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    [email protected]:contributor/testify.git (fetch)
fork    [email protected]:contributor/testify.git (push)
origin  [email protected]:stretchr/testify (fetch)
origin  [email protected]:contributor/testify.git (push)

You can easily change default remote for branches all at once simple using this command

git push -u <remote_name> --all

Like docs say:

When the command line does not specify where to push with the <repository> argument, branch.*.remote configuration for the current branch is consulted to determine where to push. If the configuration is missing, it defaults to origin.


It might be helpful to take a look at .git/config inside your repo, it will list all remotes and also the default remote for each branch

eg.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = [email protected]:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

you can make manual changes in this file to remove an unwanted remote, or update the default remotes for the different branches you have

  • Pay attention! when changing or removing the remotes make sure to update all references to it in this config file

You can use git push -u <remote_name> <local_branch_name> to set the default upstream. See the documentation for git push for more details.


Working with Git 2.3.2 ...

git branch --set-upstream-to myfork/master

Now status, push and pull are pointed to myfork remote


Very simply, and cobbling together some of the great comments here along with my own research into this.

First, check out the local branch you want to tie to your remote branch:

git checkout mybranch

Next:

git branch -u origin/mybranch

where:

git branch -u {remote name}/{branch name}

You should get a message:

"Branch mybranch set up to track remote branch mybranch from origin."

Examples related to git

Does the target directory for a git clone have to match the repo name? Git fatal: protocol 'https' is not supported Git is not working after macOS Update (xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools) git clone: Authentication failed for <URL> destination path already exists and is not an empty directory SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 GitLab remote: HTTP Basic: Access denied and fatal Authentication How can I switch to another branch in git? VS 2017 Git Local Commit DB.lock error on every commit How to remove an unpushed outgoing commit in Visual Studio?

Examples related to git-push

Fix GitLab error: "you are not allowed to push code to protected branches on this project"? ! [rejected] master -> master (fetch first) Git - What is the difference between push.default "matching" and "simple" error: src refspec master does not match any Issue pushing new code in Github Can't push to GitHub because of large file which I already deleted Changing the Git remote 'push to' default What does '--set-upstream' do? Git push hangs when pushing to Github? fatal: 'origin' does not appear to be a git repository

Examples related to git-remote

Why does Git tell me "No such remote 'origin'" when I try to push to origin? Git - What is the difference between push.default "matching" and "simple" error: src refspec master does not match any How to connect to a remote Git repository? Changing the Git remote 'push to' default What does '--set-upstream' do? Git: How to remove remote origin from Git repo Git push error: "origin does not appear to be a git repository" How to add a local repo and treat it as a remote repo Git branching: master vs. origin/master vs. remotes/origin/master