我习惯于从我正在工作的分支中运行git pull和其他命令。但是我已经建立了一个几个人在上面工作的开发服务器,所以当我这样做的时候,我不想切换分支。
如果我想从我们都使用的github存储库更新开发服务器上的现有分支,正确的方法是什么?
如果我运行命令git拉github branchname是否会简单地将分支拉到当前分支?
我能找到的所有git示例似乎都表明,您首先运行checkout branchname,然后执行拉取。我尽量避免那样。正如我所说,这是一个现有的分支,我只是想更新到最新的版本。
如果您希望在git获取后重新指向本地分支提示,则需要一些额外的步骤。
更具体地说,假设github repo有分支D、B、C和master(这个奇怪的分支名称集的原因马上就会清楚)。你在主机devhost上,你在一个回购中,原点是github回购。你可以进行git取回,它会带来所有对象,并更新origin/D, origin/B, origin/C和origin/master。到目前为止一切顺利。但是现在您说希望在devhost上对本地分支D、B、C和/或master发生一些事情?
我有这些显而易见的问题(至少对我来说):
为什么要更新所有分支的提示?
如果某个分支(例如,B)已经提交了远程(github)回购所缺乏的?他们应该被合并,重新建立,还是…?
如果您在某个分支(例如,C)上,并且工作目录和/或索引被修改但没有提交,该怎么办?
如果远程回购添加了新分支(A)和/或删除了分支(D),该怎么办?
如果(1)的答案是“因为devhost实际上不是用于开发的,而是一个本地镜像,它只是保存了一个本地可用的github repo副本,以便我们所有的实际开发人员都可以快速读取它,而不是从github缓慢读取”,那么你想要的是一个“镜像”而不是“正常”的repo。它不应该有一个工作目录,也许它也不应该接受推送,在这种情况下,剩下的问题就会消失。
如果有其他答案,(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
什么会进入…代码在这里…部分取决于对问题(2-4)的回答。