【问题标题】:How to change the remote a branch is tracking?如何更改分支正在跟踪的远程?
【发布时间】:2011-06-20 04:17:58
【问题描述】:

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

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

如何更改我的本地分支以跟踪不同的远程?

我可以在 git 配置文件中看到这一点,但我不想把事情搞砸。

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

【问题讨论】:

标签: git


【解决方案1】:

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

【讨论】:

  • 啊,我的错。我仍然会通过配置来完成,因为您可以确保不会意外更改分支名称,但一切都很好。 +1。
  • 来自1.8.0 release notes:“说“git branch --set-upstream origin/master”很诱人,但这告诉 Git 安排本地分支“origin/master”与当前签出的分支,这不太可能是用户的意思。该选项已弃用;请改用新的“--set-upstream-to”(带有简短的“-u”)选项。“
  • 当我使用 git branch --set-upstream mybranch new-remote/mybranch 时,我得到了一个名为 new-remote/mybranch 的新本地分支来跟踪 mybranch。
  • 如果远程跟踪分支尚不存在,但当前正在跟踪现有的远程跟踪分支,则不能将其更改为不存在的新远程跟踪分支。您需要先取消设置当前的远程跟踪分支:git branch --unset-upstream - 然后它按照此答案中给出的方式工作(或下一个 git push -u / --set-upstream)。
  • 谢谢!这很好用!顺便说一句,如果有人收到此错误:error: the requested upstream branch 'origin/master' does not exist 然后只需运行git fetch 即可检索有关遥控器的信息。我将原点重命名为其他名称并添加了一个新原点,但我没有获取有关它的信息。
【解决方案2】:

根据 git 文档,最好的方法是:

  1. 确定实际的原点路径:

git 远程 -v

  1. 然后进行更改:

git 远程设置-url 来源

其中 url-repository 与我们从克隆选项中获得的 URL 相同。

【讨论】:

  • 问题是关于更改指向远程跟踪分支的指针,而不是远程的 URL。此外,已经有 2 个具有不同 URL 的遥控器,所以这个建议只会错误配置一个遥控器。此外,在提及文档时,请务必链接到相关页面并引用相关部分。最后,这个问题似乎已经有很多有效的答案(实际上其中一个与您的非常相似),所以除非您发现一些新奇的东西,否则我建议您改进现有的答案。
【解决方案3】:

在尝试上述方法并搜索、搜索等之后,我意识到我的本地分支上的服务器上没有我的任何更改,并且 Team Explorer 中的 Visual Studio 并未表明该分支跟踪了远程分支。远程分支在那里,所以它应该可以工作。我最终删除了 github 上的远程分支,并“重新”推送了我的本地分支,该分支的更改因未知原因未被跟踪。

通过删除远程分支并“重新”推送我未被跟踪的本地分支,本地分支在 git hub 上重新创建。我在命令提示符下尝试了这个(使用 Windows)我无法让我的本地分支跟踪远程分支,直到我这样做。一切恢复正常。

【讨论】:

  • 嗨基南。请不要在此处向您的材料添加签名 - 个人资料卡被认为可以很好地执行此任务。谢谢!
【解决方案4】:

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

git push -u origin 分支/名称

【讨论】:

  • 不知道为什么这个答案没有得到更多的爱 - 它实际上是更新正在跟踪的遥控器的最快方法。我来寻找比这更好的答案,即无需推送即可更改的命令行选项,但这似乎是最合适的...git config -e 是第二个选项,如果您还没有准备好推送...
【解决方案5】:

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

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。
  • @belgoros git fetch --all 也许?
  • @belgoros,我遇到了同样的问题。改用git push --set-upstream origin 解决了它。在那之后,我才意识到@hakre 对已接受答案的评论已经更清楚地解释了它。
【解决方案6】:

我发现@critikaster 的帖子很有帮助,但我必须使用 GIT 2.21 执行这些命令:

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

【讨论】:

    【解决方案7】:

    2.7.4 等最新的 git 版本中,

    git checkout branch_name#branch名称你要更改的跟踪分支

    git branch --set-upstream-to=upstream/tracking_branch_name#upstream - 远程名称

    【讨论】:

      【解决方案8】:

      这是最简单的命令:

      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 时使用了你的建议;)谢谢。
      【解决方案9】:

      根据我从最新的 git documentation 了解到的内容,概要是:

      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 
      

      我猜他们又更改了文档?

      【讨论】:

        【解决方案10】:

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

        git config --edit
        

        或简写

        git config -e
        

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

        【讨论】:

        • 这为我节省了一天。谢谢!
        • 我的问题是有两个起源。 (起源和起源算法)。但是本地大师正在跟踪“origin-algo”。但我希望它跟踪“起源”。我可以改变的唯一方法是编辑 git 配置。
        【解决方案11】:

        对我来说,解决方法是:

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

        然后:

        git push
        

        【讨论】:

        • 这是 Github 所说的方式。 help.github.com/articles/changing-a-remote-s-url
        • 这实际上改变了遥控器的位置,它不会改变你正在跟踪的遥控器(技术上)——你仍在跟踪“原点”,它只是更新了原点的定义。对于某些用例,这可能是一件坏事。假设你 fork jQuery 并制作了一个新的遥控器。 "origin" 是你的 fork,"upstream" 是 jQuery。然后假设您需要临时跟踪原始 repo 而不是您的 fork。如果您使用了set-url 并忘记将其重新设置,那么将来的git push 命令将失败
        【解决方案12】:
        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 checkout feature/new-feature-branch 之前执行git fetch。希望这对其他人有帮助。
        【解决方案13】:

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

        git branch --track local_branch remote_branch
        

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

        【讨论】:

        • 对我不起作用,唯一有效的命令是来自@uma 的命令:git checkout --track -b local_branch_name origin/branch_name
        【解决方案14】:

        如果您对此保持清醒,编辑配置文件就足够安全了。如果你想偏执一点,你可以使用瓷器命令来修改它:

        git config branch.master.remote newserver
        

        当然,如果您查看之前和之后的配置,您会发现它完全按照您的计划进行。

        但在您的个人情况下,我会做的是:

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

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

        【讨论】:

        • 在遇到这个问题之前我实际上已经这样做了——git很聪明,并且将远程重命名带到了配置文件中,所以在你的例子中,我的配置文件说'旧起源'。跨度>
        • 就个人而言,我认为这种方式在概念上比公认的方式更有意义,但我想它们在功能上是等效的,对吗?
        • @Jefromi:remote rename 不会执行所要求的操作,因为它会在 [remote] 配置和 [branch] 配置中更改遥控器的名称。因此,在这种情况下需要做的是编辑配置文件并在 [remote] 配置行处执行您所说的操作(重命名遥控器)。
        猜你喜欢
        • 1970-01-01
        • 2014-10-07
        • 2012-07-01
        • 2010-10-16
        • 2018-03-24
        • 2010-09-15
        • 2016-09-12
        • 2013-04-30
        相关资源
        最近更新 更多