将Git远程“推送到”更改为默认值


227

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

git push

代替:

git push upstream

当前,此设置为原始远程,我想将其设置为其他远程。

我试图删除原始(克隆自)遥控器

git remote rm origin

确实删除了原始遥控器。但是并不能解决git push问题。我仍然得到:

致命:没有配置的推送目标。
从命令行指定URL 或使用...配置远程存储库

我也试着玩:

git remote set-url --push myfork origin

和其他选项,但似乎都不起作用(也许是因为我太早删除了原始远程服务器?)

按照这里答案,我尝试更改:

git config push.default upstream (or matching)

但都没有奏效。

Answers:


214

您可以git push -u <remote_name> <local_branch_name>用来设置默认的上游。有关更多详细信息,请参见git push文档


1
不起作用:我得到致命错误:'origin'似乎不是git存储库致命:远程端意外挂断'''' 刚刚找到了
可行的

34
作为补充说明,语法应为git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>
Marco Lazzeri 2014年

33
范例:git push -u origin master:master
starbeamrainbowlabs 2015年

1
设置默认的远程服务器后...是否仍然可以强制git push推送当前本地分支的远程分支?我的意思是这样做意味着我必须为每个分支运行此命令。对?我不能仅对整个仓库进行初始设置吗?@MarcoLazzeri
Honey

2
@starbeamrainbowlabs还git push -u origin master不够吗?您只是在说明完整的语法吗?
乔西亚·约德

107

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

确保远程首先存在:

git remote -vv

设置当前(签出)分支的首选遥控器:

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

验证是否使用正确的上游远程服务器设置了分支:

git branch -vv


2
刚刚尝试git branch --set-upstream-to myfork并遇到一个错误:>错误:未知选项`set-upstream-to'我正在运行git 1.7.9
alonisser


1
参见以下答案:stackoverflow.com/a/2432799/1820106git remote set-url origin PATH_TO_REMOTE
伊农·埃利希

10
git branch -u <remotename>/<branch>为我工作。在签出感兴趣的本地分支的情况下运行了该命令。参见git-scm.com/book/it/v2/Git-Branching-Remote-Branches中的
norio

2
远程命令的详细输出实际上是just git remote -vgit remote --verbose。在-vv的额外v是多余的。
Artif3x

45

使用Git 2.3.2 ...

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

现在statuspushpull指向myfork远程


当您只想设置默认值时,此pull方法也适用。
StingyJack


16

如果您git push origin -u localBranchName:remoteBranchName按顺序执行git push命令,则将收到错误消息,说明该错误不存在起源,然后执行以下步骤:

  1. git remote -v

检查是否有我不需要的遥控器。用删除它们git remote remove 'name'

  1. git config --edit

查找旧的/不存在的遥控器的可能迹象。寻找pushdefault

[remote]
  pushdefault = oldremote

更新oldremote值并保存。

git push 应该现在工作。


2
谢谢!由于肌肉记忆力,我倾向于-u在使用git push其他遥控器时添加。这使给定的遥控器成为默认遥控器,使用git config --edit(或再次按下并设置新遥控器)将其重新设置即可解决该问题。
TimVisée19年

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

现在,您应该了解远程存储库的最新信息,并且您的拉取/推入操作应绑定到适当的远程服务器。您可以按照这种方式在每个分支机构中切换遥控器。[注意] [1]

根据The Git Config官方文档,您可以设置默认的 push分支(只需在该页面上搜索remote.pushdefault),但是请记住,这不会影响已经存在的存储库/分支,因此这仅适用于用于新的存储库/分支。您应该记住,这--global将设置用户特定的存储库默认设置(〜/ .gitconfig),--system将设置系统范围的存储库默认值(/ etc / gitconfig),并且没有标志将设置当前存储库的配置选项(./.gitconfig)。

还应注意,push.default config选项用于配置ref-spec行为,而不是 远程的行为。

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


代替git config -l | grep myremote,您可以简单地使用:git config --get branch.myremote.remote
Murmel '18

@Murmel首先,这是一个社区Wiki,因此可以随时进行改进,其次,--get采取特殊行为,我记下了设置上游的其他方法,但这提供了一种在不依赖git工具的情况下查找信息的方法。正确。Git并不是完美的,它更好地了解数据,处理数据,然后希望其调用能够正常工作。
smaudet

10

看一下.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/*

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

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

5

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

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

5
这不是一个很好的解决方案,git用户应该能够从多个存储库中拉/推-尽管这将允许您更改原始版本的远程,但这并不意味着您应该更改原始版本的远程,因为这很可能意味着遥控器之间存在许多不兼容性。合并将在这里提供帮助,但是它既简单又保留了更多的历史记录,可以在新分支上设置遥控器。
smaudet 2014年

这不是正确的方法...
@Jordan

1
另请参阅:stackoverflow.com/a/2432799/1820106git remote set-url origin PATH_TO_REMOTE
Yinon Ehrlich

5

很简单,将我这里的一些很棒的评论和我自己的研究汇总在一起。

首先,签出您要绑定到远程分支的本地分支:

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."

3

就我而言,我通过以下方法进行了修复:*运行git config --edit *在git config文件中:

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

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.