如何更改分支跟踪的远程位置?


671

central存储库必须在新服务器上设置,因此我在本地存储库上创建了一个新的远程服务器,并将其推送到该服务器上。

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

如何更改本地分支以跟踪其他遥控器?

我可以在git config文件中看到它,但是我不想弄乱。

[branch "master"]
    remote = oldserver
    merge = refs/heads/master

1
我调整了标题-您实际上是在尝试更改要跟踪的遥控器,但仍在其中跟踪相同的分支名称。
卡斯卡贝尔2011年


5
很难将其视为“ 如何使现有Git分支跟踪远程分支?”的副本。这个问题并没有说明分支已经在跟踪远程分支。这一个。

1
在我看来,编辑配置文件是解决此问题的最简单最安全的方法
Steven Lu

Answers:


1077

使用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


2
这就是我想要的-为给定分支更改了远程跟踪分支。谢谢!
joachim

7
啊,我的坏。我仍然会通过config进行操作,因为您可以确保不会意外更改分支名称,但是一切都很好。+1。
卡斯卡贝尔2011年

1.8.0发行说明中:“说“ git branch --set-upstream origin / master”很诱人,但这告诉Git安排本地分支“ origin / master”与当前签出的分支集成,该选项已过时;请改用新的“ --set-upstream-to”(带有简短的“ -u”)选项。“
Jared Beck

太干净了 我可以轻松修复我创建的小混乱!谢谢=))
Aditya MP

56
如果远程跟踪分支尚不存在,但是当前正在跟踪现有的远程跟踪分支,则不能将其更改为不存在的新远程跟踪分支。您需要先取消设置当前的远程跟踪分支:git branch --unset-upstream-然后按此答案(或下一个git push -u / --set-upstream)中的说明进行操作。
hakre 2015年

88

对我来说,解决方法是:

git remote set-url origin https://some_url/some_repo

然后:

git push


18
这实际上会更改远程控制的位置,不会更改您正在跟踪的远程控制(技术上),而是仍在跟踪“来源”,它只是更新了源的定义。对于某些用例,这可能是一件坏事。假设您派生jQuery并创建一个新的远程控件。“起源”是你的叉子,“上游”是jQuery。然后,假设您需要临时跟踪原始存储库而不是叉子。如果您曾经使用过但set-url忘记将其重新设置,则以后的git push命令将失败
stevendesu

42

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

git branch --set-upstream-to=origin/branch

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


3
命中git branch --set-upstream-to=origin/develop引发了错误:error: the requested upstream branch 'origin/develop' does not exist。以前,我将远程分支重命名为delelop。
belgoros

1
@belgoros git fetch --all也许吗?
加布里埃尔·德维勒

25

可以控制发生的另一种选择是手动编辑配置:

git config --edit

或速记

git config -e

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


1
这为我节省了一天。谢谢!
马丁·钱伯林

我的问题是有两个起源。(起源和起源算法)。但是当地主人正在追踪“起源算法”。但我希望它跟踪“起源”。我可以更改的唯一方法是编辑git config。
阿斯温·普拉萨德

19

如果您对此感到理智,那么编辑配置文件就足够安全了。如果您想变得更偏执,可以使用瓷器命令对其进行修改:

git config branch.master.remote newserver

当然,如果您查看配置的前后,您会发现它确实完成了您打算做的事情。

但就您个人而言,我要做的是:

git remote rename origin old-origin
git remote rename new-origin origin

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


3
在解决这个问题之前,我实际上已经做到了-git很聪明,并且将远程重命名传递到配置文件,因此在您的示例中,我的配置文件说“ old-origin”。
joachim

就个人而言,我认为这种方式在概念上比公认的方式更有意义,但我想它们在功能上是等效的,对吗?
埃文·多诺万

1
@Jefromi:A remote rename不会执行所要求的操作,因为它在[remote]配置和[branch]配置中都更改了遥控器的名称。因此,在这种情况下,需要做的是编辑配置文件,然后在[remote]配置行执行您要说的事情(重新命名遥控器)。
Sumeet Pareek

7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

要么

git fetch
git checkout -b local_branch_name origin/branch_name

就我而言,我需要git fetch。我在bitbucket中创建了一个新分支,并希望切换到该分支。Git并不了解远程修改,所以我不得不这样做git fetch之前git checkout feature/new-feature-branch。希望这对其他人有帮助。
TelamonAegisthus

6

这是最简单的命令:

git push --set-upstream <new-origin> <branch-to-track>

例如,给定命令将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)

改为跟踪团队:

git push --set-upstream team master

没有歧义时,要跟踪的分支是可选的。离开Github时,我使用了您的建议;)谢谢。
gouessej

4

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

git branch --track local_branch remote_branch

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


不适用于我,只有有效的命令是来自@uma的命令: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid 2015年

2

根据我从最新的git 文档中了解的内容,概要是:

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

这种用法似乎与urschrei的回答有些不同,因为他的提要是:

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

我猜他们又更改了文档?



1

我发现@critikaster的帖子很有帮助,除了我必须使用GIT 2.21执行以下命令:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master

0

最简单的方法是简单地推送到新分支:

git push -u原始分支/名称

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.