git fetch 在抓取远程跟踪分支时,到底会不会生成副本?

查看:107
本文介绍了git fetch 在抓取远程跟踪分支时,到底会不会生成副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这个问题是在学习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指针?主要原文说的从中抓取本地没有的数据,并且更新本地数据库这句话很模糊,这些数据是什么数据也没说。

解决方案

没毛病。

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

划重点,这个分支是 master。

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

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

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

这篇关于git fetch 在抓取远程跟踪分支时,到底会不会生成副本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆