更改Git遥控器'推送到'默认值

时间:2013-09-14 11:13:06

标签: git git-push git-remote

我想更改Git默认远程分支目的地,所以我可以

git push

而不是:

git push upstream

目前设置为原始遥控器,我想将其设置为不同的遥控器。

我试图删除原始(克隆自)远程

git remote rm origin

哪个删除了原始遥控器。但是没有解决git push问题。我还是得到了:

  

致命:没有配置推送目的地。从中指定URL   命令行或使用...

配置远程存储库

我也试过玩:

git remote set-url --push myfork origin

和其他选项但似乎都没有用(可能是因为我太快删除了原点遥控器?)

answer here之后我试图改变:

git config push.default upstream (or matching)

但都没有奏效。

13 个答案:

答案 0 :(得分:167)

您可以使用git push -u <remote_name> <local_branch_name>设置默认上游。有关详细信息,请参阅documentation for git push

答案 1 :(得分:72)

要更改哪个上游远程“连接”到您的分支,请使用带有上游配置标志的git branch命令。

首先确保遥控器存在:

git remote -vv

为当前(签出)分支设置首选远程:

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

使用正确的上游远程设置验证分支:

git branch -vv

答案 2 :(得分:32)

您可以使用此命令轻松更改分支的默认远程

git push -u <remote_name> --all

答案 3 :(得分:30)

使用Git 2.3.2 ...

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

现在statuspushpull指向myfork远程

答案 4 :(得分:13)

只是澄清(在ubuntu 12.04上使用git版本1.7.9.5):

Git将添加/删除遥控器。这些是附加服务器的git的远程实例。

git remote add myremote git://remoteurl

然后您可以像这样获取所说的git存储库:

git fetch myremote

这似乎创建了一个名为'myremote'的分支,但是不会自动设置分支的远程。为此,您必须执行以下操作:

首先,确认您遇到此问题,即

git config -l | grep myremote

您应该看到类似的内容:

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

如果您看到branch.myremote.remote=.,那么您应该继续:

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

您现在应该与远程存储库保持同步,并且您的pull / push应该绑定到相应的远程数据库。您可以通过这种方式切换遥控器,每个分支。 [注] [1]

根据a The Official Git Config Documentation,您可以设置默认推送分支(只在该页面上搜索remote.pushdefault),但请记住,这不会影响存储库/分支机构已经存在,所以这将工作,但只适用于新的存储库/分支机构。您应该记住--global将设置用户特定的存储库默认值(〜/ .gitconfig),--system将设置系统范围的存储库默认值(/ etc / gitconfig),并且没有标志将设置配置选项当前存储库(./。gitconfig)。

还应注意 push.default 配置选项用于配置 ref-spec 行为, 远程< / em>行为。

[1]:git branch --set-upstream myotherremote通常会在这里工作,但是如果使用git branch --set-upstream myremote,git会抱怨它不会将分支设置为自己的远程。但我相信这是不正确的行为。

答案 5 :(得分:7)

如果您执行了git push origin -u localBranchName:remoteBranchName和顺序git push命令,则会收到错误,然后原点不存在,请按照以下步骤操作:

  1. git remote -v
  2. 检查是否有任何我不在乎的遥控器。 使用git remote remove 'name'

    删除它们
    1. git config --edit
    2. 查找旧的/不存在的遥控器的可能迹象。 寻找pushdefault

      [remote]
        pushdefault = oldremote
      

      更新oldremote值并保存。

      git push现在应该可以使用了。

答案 6 :(得分:4)

我刚刚找到解决此问题的另一种技术(即使我先删除了原点,似乎是一个错误)是直接操作git配置:

git config remote.origin.url url-to-my-other-remote

答案 7 :(得分:3)

非常简单,并将这里的一些重要评论与我自己的研究结合起来。

首先,查看您想要绑定到远程分支的本地分支:

git checkout mybranch

下一步:

git branch -u origin/mybranch

其中:

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

你应该收到一条消息:

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

答案 8 :(得分:1)

git push -u origin head 正是我要找的。

这是它为我解决的问题:

fatal: The current branch task/PLAT-1924-datagrid-tool-panel-scrollbar has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin task/PLAT-1924-datagrid-tool-panel-scrollbar

➜  frontend git:(task/PLAT-1924-datagrid-tool-panel-scrollbar) git push -u origin head

我可以使用键盘快捷键或别名输入 git push --set-upstream origin task/PLAT-1924-datagrid-tool-panel-scrollbar,而不是使用我的鼠标从 Git (git push -u origin head) 中复制建议然后粘贴并运行它不需要特定于分支。

感谢https://stackoverflow.com/a/23402125/470749

答案 9 :(得分:0)

在仓库中查看.git/config可能会有所帮助,它将列出所有遥控器以及每个分支的默认遥控器

例如

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be: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/*

您可以在此文件中进行手动更改,以删除不需要的遥控器,或更新您拥有的不同分支的默认遥控器

  • 请注意!更改或删除遥控器时,请确保在此配置文件中更新对其的所有引用

答案 10 :(得分:0)

就我而言,我通过以下措施解决了问题: *运行git config --edit *在git配置文件中:

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

答案 11 :(得分:0)

如上所述,

git remote set-url --push origin应该可以工作,但是您需要显式提供url而不是其他远程名称,例如

git remote set-url --push origin git@github.com:contributor/repo.git

您可以通过执行git remote -v来确认是否可行。例如

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)

答案 12 :(得分:0)

docs 说:

<块引用>

当命令行没有使用 <repository> 参数指定推送到哪里时,会参考当前分支的 branch.*.remote 配置来确定推送到哪里。如果缺少配置,则默认为origin