git fetch 在抓取远程跟踪分支时,到底会不会生成副本?
巴扎黑
巴扎黑 2017-06-22 11:52:57
0
1
913

这个问题是在学习Pro git “远程分支”时产生的疑问。

问题:
git fetch 在抓取远程跟踪分支的时候,到底会不会生成本地副本?

先看原文的讲解,

如果要同步你的工作,运行 git fetch origin 命令。 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com),从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。

从图中来看,因为master分支是本地,从 clone 了远程仓库开始(f4265提交点)之后,本地做了两次提交,生成了新的提交链条。而同时,服务器上有其他人推送了提交到服务器的master分支(31b8e,190a3),因此,当使用 git fetch origin 时,我的理解是:
本地master分支不会受到影响,从分叉点即fetch前的origin/master开始,在本地生成了新的一条分支,这条分支确实在本地生成了副本,同时把 origin/master指针指向了本地副本的末端。

但读到下面,又来了这么一段:

要特别注意的一点是当抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本(拷贝)。 换一句话说,这种情况下,不会有一个新的 serverfix 分支 - 只有一个不可以修改的 origin/serverfix 指针。

我就不明白了,难道我前面的理解是错误的?那 Figure 32 的图示也是错的?根本就不会再本地得到 (31b8e,190a3)这两个提交点,只会在数据库中得到一个新的 origin/master指针?主要原文说的“从中抓取本地没有的数据,并且更新本地数据库”这句话很模糊,这些数据是什么数据也没说。

巴扎黑
巴扎黑

全部回复(1)
给我你的怀抱

没毛病。

从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。

划重点,这个分支是 master。

当抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本(拷贝)。 换一句话说,这种情况下,不会有一个新的 serverfix 分支 - 只有一个不可以修改的 origin/serverfix 指针。

所以,需要使用 git checkout -b serverfix origin/serverfix 创建可编辑的本地副本。

只有 master 分支会创建可编辑的本地副本。其它的分支都是在 origin/* 下面,需要手动的 git checkout -b

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板