如果要在之后重新指向本地分支提示git fetch,则需要一些其他步骤。
更具体地说,假设GitHub库设有分支机构D,B,C,和master(对于这个奇怪的分支名集之所以会在某一时刻清楚)。您在主机上devhost,并且在origingithub仓库中的仓库中。你这样做git fetch,这带来了超过所有对象和更新origin/D,origin/B,origin/C,和origin/master。到目前为止,一切都很好。但是现在你说你想要的东西的事情发生,就devhost到当地的分支机构D,B,C,和/或master?
我有这些显而易见的问题(无论如何对我来说):
- 为什么要更新所有分支的提示?
- 如果某个分支(例如
B)具有远程(github)存储库所缺少的提交怎么办?应该合并,重新设置基础还是...?
- 如果您在某个分支(例如
C)上并且工作目录和/或索引已修改但未提交怎么办?
- 如果远程仓库增加了新分支(
A)和/或删除了分支(D),该怎么办?
如果对(1)的回答是“因为devhost实际上不是为了开发,而是一个本地镜像,它只是保留了github存储库的本地可用副本,以便我们所有的实际开发人员都可以从中快速读取而不是从中缓慢读取github”,那么您需要一个“镜像”而不是一个“常规”存储库。它不应该有工作目录,也许也不应该接受推送,在这种情况下,剩下的问题就消失了。
如果还有其他答案,(2-4)会出现问题。
无论如何,这是一种基于远程引用(git fetch -p例如在运行之后)解决更新本地引用的方法:
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
本... code here ...节中的内容取决于问题的答案(2-4)。
git fetch应该做你想做的。