关于git:如何更改远程分支正在跟踪?


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 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或更低版本:

江户十一〔七〕号


对我来说,解决办法是:

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

然后:

1
git push


对于最新的git(2.5.5),命令如下:

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

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


如果你对它很理智,那么编辑配置文件就足够安全了。如果你想更偏执一点,你可以使用瓷质命令来修改它:

1
git config branch.master.remote newserver

当然,如果您在之前和之后查看配置,您将看到它确实完成了您将要做的工作。

但就你个人而言,我会做的是:

1
2
git remote rename origin old-origin
git remote rename new-origin origin

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


另一个对正在发生的事情有很大控制权的选择是手工编辑您的配置:

1
git config --edit

或者速记

1
git config -e

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


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


这是最简单的命令:

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

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

1
2
3
4
origin  ssh://[email protected]/~myself/projectr.git (fetch)
origin  ssh://[email protected]/~myself/projectr.git (push)
team    ssh://[email protected]/vbs/projectr.git (fetch)
team    ssh://[email protected]/vbs/projectr.git (push)

改为跟踪团队:

1
git push --set-upstream team master


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

1
git branch --track local_branch remote_branch

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


根据我从最新的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上游-远程名称