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

alo*_*ser 201 git git-push git-remote

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

git push
Run Code Online (Sandbox Code Playgroud)

代替:

git push upstream
Run Code Online (Sandbox Code Playgroud)

目前这被设置为原始远程,我想将其设置为不同的远程.

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

git remote rm origin
Run Code Online (Sandbox Code Playgroud)

哪个确实删除了原来的遥控器.但并没有解决git push问题.我还是得到:

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

我也试过玩:

git remote set-url --push myfork origin
Run Code Online (Sandbox Code Playgroud)

和其他选项,但似乎没有工作(也许是因为我太快删除了原点遥控器?)

这里答案后,我试图改变:

git config push.default upstream (or matching)
Run Code Online (Sandbox Code Playgroud)

但都没有奏效.

161*_*903 186

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

  • 作为补充说明,语法应为`git push -u <remote_name> <local_branch_name>:<associated_remote_branch_name>`. (28认同)
  • 示例:`git push -u origin master:master`. (24认同)
  • 不起作用:我得到'''致命:'origin'似乎不是git存储库致命:远程端意外挂起'''可能是因为我在继续之前删除了origin远程。刚刚找到一个可行的解决方案,我将更新答案 (3认同)
  • 设置默认远程后...是否可以强制“git push”推送当前本地分支的远程分支?我的意思是这样做意味着我必须为每个分支运行此命令。正确的?我不能为整个存储库进行初始设置吗?@MarcoLazzeri (2认同)
  • @starbeamrainbowlabs `git push -u origin master` 还不够吗?您只是说明完整的语法吗? (2认同)

小智 90

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

首先确保远程存在:

git remote -vv

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

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

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

git branch -vv

  • `git branch -u <remotename>/<branch>`为我工作.该命令在检出的本地感兴趣分支的情况下运行.请参阅https://git-scm.com/book/it/v2/Git-Branching-Remote-Branches中的"跟踪分支" (9认同)
  • 语法在1.8中更改,请参阅http://stackoverflow.com/questions/520650/make-an-existing-git-branch-track-a-remote-branch (3认同)
  • 刚试过````git branch --set-upstream-to myfork```并得到一个错误:>错误:未知选项`set-upstream-to'我正在运行git 1.7.9 (2认同)
  • 请参阅以下答案:http://stackoverflow.com/a/2432799/1820106(`git remote set-url origin PATH_TO_REMOTE`) (2认同)
  • 远程命令详细输出实际上只是 `git remote -v` 或 `git remote --verbose`。`-vv` 的额外 v 是多余的。 (2认同)

pin*_*nei 37

使用Git 2.3.2 ...

git branch --set-upstream-to myfork/master
Run Code Online (Sandbox Code Playgroud)

现在status,pushpull指向myfork远程

  • 当您只想设置“pull”的默认值时,这也适用。 (3认同)

Myk*_*yuk 36

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

git push -u <remote_name> --all
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,这将推动所有这些,以及更改其上游遥控器. (11认同)

sma*_*det 13

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

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

git remote add myremote git://remoteurl
Run Code Online (Sandbox Code Playgroud)

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

git fetch myremote
Run Code Online (Sandbox Code Playgroud)

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

首先,确认您有这个问题,即

git config -l | grep myremote
Run Code Online (Sandbox Code Playgroud)

你应该看到类似的东西:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master
Run Code Online (Sandbox Code Playgroud)

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

git config branch.myremote.remote myremote
git checkout myremote
git pull
Run Code Online (Sandbox Code Playgroud)

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

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

另外需要注意的是,push.default配置选项用于配置ref-spec行为,而不是 远程行为.

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


Șer*_*iță 13

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

  1. git remote -v

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

  1. git config --edit

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

[remote]
  pushdefault = oldremote
Run Code Online (Sandbox Code Playgroud)

更新oldremote值并保存。

git push 应该现在工作。

  • 谢谢!由于肌肉记忆,我倾向于在将 `git push` 使用到不同的遥控器时添加 `-u`。这使给定的遥控器成为默认值,使用`git config --edit`(或再次推送并设置新的遥控器)将其设置回来解决了问题。 (2认同)

Ron*_*Ron 9

就我而言,我通过以下方式修复: * run git config --edit * 在 git 配置文件中:

[branch "master"]
remote = origin # <--- change the default origin here
Run Code Online (Sandbox Code Playgroud)


小智 9

git 手册页中,您将找到以下内容:

remote.pushDefault
默认情况下要推送到的遥控器。覆盖branch.<name>.remote所有分支,并被branch.<name>.pushRemote特定分支覆盖。


alo*_*ser 5

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

git config remote.origin.url url-to-my-other-remote
Run Code Online (Sandbox Code Playgroud)

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

Art*_*f3x 5

非常简单,将这里的一些重要评论与我自己对此的研究拼凑在一起。

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

git checkout mybranch
Run Code Online (Sandbox Code Playgroud)

下一个:

git branch -u origin/mybranch
Run Code Online (Sandbox Code Playgroud)

在哪里:

git branch -u {remote name}/{branch name}
Run Code Online (Sandbox Code Playgroud)

您应该收到一条消息:

"Branch mybranch set up to track remote branch mybranch from origin."
Run Code Online (Sandbox Code Playgroud)


小智 5

看一下.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/*
Run Code Online (Sandbox Code Playgroud)

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

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