如何更改远程分支正在跟踪?

joa*_*him 608 git

central库必须建立一个新的服务器上,所以我创建了我的本地回购新的远程,并推到这一点.

但现在,当我这样做时git pull,它声称我是最新的.这是错的 - 它告诉我关于旧的远程分支,而不是新的远程分支,我知道事实上有新的提交提取.

如何更改本地分支以跟踪不同的遥控器?

我可以在git配置文件中看到这个,但我不想搞砸了.

[branch "master"]
    remote = oldserver
    merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)

urs*_*rei 978

使用git v1.8.0或更高版本:

git branch branch_name --set-upstream-to your_new_remote/branch_name

或者你可以使用-u开关:

git branch branch_name -u your_new_remote/branch_name

使用git v1.7.12或更早版本:

git branch --set-upstream branch_name your_new_remote/branch_name

  • 如果远程跟踪分支尚不存在但当前跟踪现有远程跟踪分支,则无法将其更改为现有的新远程跟踪分支.您需要首先取消设置当前的远程跟踪分支:`git branch --unset-upstream` - 然后它按照此答案中给出的那样工作(或者使用下一个`git push -u/--set-upstream`). (47认同)
  • 啊,我的坏.我仍然通过配置来做,因为你可以肯定不会意外地改变分支名称,但一切都很好.+1. (7认同)
  • 这就是我要找的 - 改变了给定分支的远程跟踪分支.谢谢! (2认同)
  • 谢谢!这很好用!顺便说一句,如果有人收到此错误:“错误:请求的上游分支“origin/master”不存在”,则只需运行“git fetch”即可检索有关远程的信息。我将 origin 重命名为其他名称并添加了新的 origin,但我没有获取有关它的信息。 (2认同)

cri*_*ter 78

对我来说,修复是:

git remote set-url origin https://some_url/some_repo
Run Code Online (Sandbox Code Playgroud)

然后:

git push
Run Code Online (Sandbox Code Playgroud)

  • 这实际上改变了遥控器的位置,它不会改变您正在跟踪的遥控器(技术上) - 您仍在跟踪"原点",它只是更新原点的定义.对于某些用例,这可能是一件坏事.假设您派生jQuery并创建一个新的远程."origin"是你的fork,"upstream"是jQuery.然后假设您需要暂时跟踪原始仓库而不是叉子.如果您使用`set-url`并忘记将其设置回来,则将来的`git push`命令将失败 (16认同)
  • 这就是Github说这样做的方式.https://help.github.com/articles/changing-a-remote-s-url/ (3认同)

Ko2*_*o2r 37

使用最新的git(2.5.5)命令如下:

git branch --set-upstream-to=origin/branch
Run Code Online (Sandbox Code Playgroud)

这将更新当前本地分支的远程跟踪分支

  • 点击`git branch --set-upstream-to = origin / develop`会引发错误:`error:所请求的上游分支'origin / develop'不存在。以前,我将远程分支重命名为delelop。 (3认同)
  • @belgoros `git fetch --all` 也许? (3认同)

wra*_*aud 22

对发生的事情进行大量控制的另一个选择是手动编辑配置:

git config --edit
Run Code Online (Sandbox Code Playgroud)

或速记

git config -e
Run Code Online (Sandbox Code Playgroud)

然后随意编辑文件,保存并应用您的修改.


Cas*_*bel 19

如果你对它有所了解,编辑配置文件足够安全.如果你想变得更偏执,你可以使用瓷器命令来修改它:

git config branch.master.remote newserver
Run Code Online (Sandbox Code Playgroud)

当然,如果您在之前和之后查看配置,您会发现它确实完成了您要执行的操作.

但在你的个案中,我要做的是:

git remote rename origin old-origin
git remote rename new-origin origin
Run Code Online (Sandbox Code Playgroud)

也就是说,如果新服务器将成为规范的远程服务器,为什么不将其称为原始服务器,就好像您最初从服务器克隆它一样?

  • 在解决这个问题之前我实际上已经这样做了 - git很聪明并且将远程重命名带到了配置文件中,所以在你的例子中,我的配置文件说'old-origin'. (3认同)

uma*_*uma 7

git fetch origin
git checkout --track -b local_branch_name origin/branch_name
Run Code Online (Sandbox Code Playgroud)

要么

git fetch
git checkout -b local_branch_name origin/branch_name
Run Code Online (Sandbox Code Playgroud)


And*_*ies 6

这是最简单的命令:

git push --set-upstream <new-origin> <branch-to-track>
Run Code Online (Sandbox Code Playgroud)

例如,给定命令将git remote -v产生如下内容:

origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (fetch)
origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (push)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (fetch)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (push)
Run Code Online (Sandbox Code Playgroud)

改为跟踪团队:

git push --set-upstream team master
Run Code Online (Sandbox Code Playgroud)


RDL*_*RDL 5

您可以删除当前分支并执行以下操作:

git branch --track local_branch remote_branch
Run Code Online (Sandbox Code Playgroud)

或者将配置中的远程服务器更改为当前服务器


归档时间:

查看次数:

365683 次

最近记录:

6 年,5 月 前