How to change the remote a branch is tracking?
必须在新服务器上设置central存储库,因此我在本地repo上创建了一个新的远程文件,并将其推送到该服务器上。
但现在当我做git pull时,它声称我是最新的。这是错误的—它告诉我的是旧的远程分支,而不是新的分支,因为我知道它有新的承诺要获取。
如何更改本地分支以跟踪不同的遥控器?
我可以在git配置文件中看到这个,但我不想把事情搞砸。
1 2 3
| [branch"master"]
remote = oldserver
merge = refs/heads/master |
- 我修改了你的标题——你实际上是想改变你正在跟踪的遥控器,但仍然跟踪其中的同一个分支名称。
- 如何使现有Git分支跟踪远程分支的可能副本?
- 很难将其视为如何使现有Git分支跟踪远程分支的副本?。该问题未指定分支已在跟踪远程分支。是的。
- 在我看来,编辑配置文件是最简单、最安全的方法
使用Git v1.8.0或更高版本:
git branch branch_name--set-upstream-toyour_new_remote/branch_name号
也可以使用
-u开关:
git branch branch_name-uyour_new_remote/branch_name号
使用Git v1.7.12或更低版本:
江户十一〔七〕号
- 这就是我要找的——为给定的分支更改了远程跟踪分支。谢谢!
- 啊,我的错。我仍然会通过config来完成,因为您可以确保不会意外地更改分支名称,但是一切都很好。+ 1。
- 从1.8.0版本的注释中可以看出:"很有诱惑力地说"git branch——设置上游的origin/master",但这告诉git要安排本地分支"origin/master"与当前签出的分支进行集成,这极不可能是用户的意思。该选项已被弃用;请改用新的"-set upstream"选项(使用简短的"-u")。
- 太干净了,我可以很容易地解决我造成的小混乱!谢谢你())
- 当我使用git branch --set-upstream mybranch new-remote/mybranch时,我得到了一个新的本地分支机构new-remote/mybranch来跟踪我的分支机构。
- 如果远程跟踪分支尚不存在,但当前跟踪了现有的远程跟踪分支,则无法将其更改为现有的新远程跟踪分支。您需要先取消设置当前的远程跟踪分支:git branch --unset-upstream,然后按照此答案(或与下一个git push -u / --set-upstream一起)中给出的方式工作。
- @好电话,正在找那个答案:)
- 谢谢!这很管用!顺便说一句,如果有人收到这个错误:error: the requested upstream branch 'origin/master' does not exist,那么只需运行git fetch来检索有关远程的信息。我把原点重新命名为其他的东西,并添加了一个新的原点,但我没有得到关于它的信息。
- 然而,这是可行的,有时在这个常规的推送重新打开删除的远程分支之后——然后我需要显式地"推到"(vsc command=>then choose origin)/git push -u origin feature_branch_name,然后推到新的分支(而不是删除的分支)。
对我来说,解决办法是:
1
| git remote set-url origin https://some_url/some_repo |
。
然后:
。
- 这就是Github说的方法。帮助.github.com/articles/changing-a-remote-s-url
- 这实际上改变了遥控器的位置,而不是改变了你正在跟踪的遥控器(技术上来说)——你仍然在跟踪"原点",它只是更新了原点的定义。对于某些用例来说,这可能是一件坏事。假设您分叉jquery并创建一个新的远程对象。"原点是你的叉子,上游是jquery。然后假设您需要临时跟踪原始回购而不是您的fork。如果您使用set-url而忘记将其设置回原处,那么将来的git push命令将失败。
对于最新的git(2.5.5),命令如下:
1
| git branch --set-upstream-to=origin/branch |
这将更新当前本地分支的远程跟踪分支
- 击中git branch --set-upstream-to=origin/develop引起了错误:error: the requested upstream branch 'origin/develop' does not exist。以前,我把一个远程分支重命名为delelop。
- @可能是贝尔哥罗斯埃多克斯1号(19号)?
如果你对它很理智,那么编辑配置文件就足够安全了。如果你想更偏执一点,你可以使用瓷质命令来修改它:
1
| git config branch.master.remote newserver |
当然,如果您在之前和之后查看配置,您将看到它确实完成了您将要做的工作。
但就你个人而言,我会做的是:
1 2
| git remote rename origin old-origin
git remote rename new-origin origin |
号
也就是说,如果新服务器将成为规范的远程服务器,为什么不把它称为原始服务器,就好像您最初是从它克隆的一样?
- 实际上,在遇到这个问题之前我就已经这样做了——Git很聪明,把远程重命名带到了配置文件中,所以在您的示例中,我的配置文件称为"old origin"。
- 就我个人而言,我认为这种方式在概念上比公认的方式更有意义,但我猜它们在功能上是等价的,对吗?
- @jefromi:一个remote rename不会做被要求做的事情,因为它在[remote]配置和[branch]配置中都改变了遥控器的名称。因此,在这种情况下,需要做的是编辑配置文件,并在[remote]配置行中执行您所说的操作(重命名远程设备)。
另一个对正在发生的事情有很大控制权的选择是手工编辑您的配置:
。
或者速记
然后随意编辑文件,保存并应用修改。
1 2
| git fetch origin
git checkout --track -b local_branch_name origin/branch_name |
。
或
1 2
| git fetch
git checkout -b local_branch_name origin/branch_name |
- 对于我的情况,我需要git fetch。我在Bitbacke创建了一个新的分支,想切换到它。Git不知道远程更改,所以我必须在git checkout feature/new-feature-branch之前执行git fetch。希望这能帮助别人。
这是最简单的命令:
1
| git push --set-upstream <new-origin> <branch-to-track> |
号
例如,给定命令git remote -v生成如下内容:
号
改为跟踪团队:
1
| git push --set-upstream team master |
号
您可以删除当前分支并执行以下操作:
1
| git branch --track local_branch remote_branch |
或者将远程服务器更改为配置中的当前服务器
- 不是我干的,只有@uma:EDOCX1[4]的指挥部
根据我从最新的Git文档中了解到的内容,概要如下:
1 2
| git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch |
。
这种用法似乎有点不同于乌尔什雷的答案,正如他的摘要所示:
1 2
| git branch local-branch -u upstream-branch
git branch local-branch --set-upstream-to=upstream-branch |
号
我猜他们又更改了文件?
我发现@critikaster的帖子很有用,只是我必须用git 2.21执行这些命令:
1 2
| $ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master |
号
在最新的Git版本中,如2.7.4,
要更改跟踪分支的git checkout branch_name分支名称
git branch --set-upstream-to=upstream/tracking_branch_name上游-远程名称