git中fetch和pull的区别

git中都fetch命令是将远程分支的最新内容拉到了本地,但是fetch后是看不到变化的,在tortoiseGit中使用switch/checkout查看当前分支,发现此时后本地多了一个FETCH_HEAD的指针,checkout到该指针后可以查看远程分支的最新内容。然后checkout到master分支,执行metch,选中FETCH_HEAD指针,合并后如果出现冲突则解决冲突,最后commit。

pull的作用就相当于fetch和merge,自动合并:

git fetch origin master
git merge FETCH_HEAD

然后需要手动解决冲突,并commit。


分支的概念:
分支是用来标记特定代码的提交,每一个分支通过SHA1sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1sum值。

如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。

A----C----E(master)
 \
  B---D---F(dev)

它们的head指针分别指向E和F,对上述做如下操作:

git checkout master
git merge dev

之后的情形是这样的:

A---C---E---G(master)
 \         /
  B---D---F(dev)

现在A,B,C,D,E,F,G属于master,G是一次合并后的结果,是将E和F的代码合并后的结果,可能会出现冲突。而A,B,D,F依然属于dev分支。可以继续在dev的分支上进行开发:

A---C---E---G---H(master)
 \         /
  B---D---F---I(dev)

理解gitfetch,关键是理解FETCH_HEADFETCH_HEAD指的是:某个branch在服务器上的最新状态。

一般来说,存在2种情况:

如果没有显示地指定远程分支,则远程分支的master将作为默认的FETCH_HEAD。
如:git fetch origin或者git fetch origin master

如果指定了远程分支,则将这个远程分支作为FETCG_HEAD
如:git fetch origin dev设定当前分支的FETCG_HEAD为远程服务器的dev分支。它就相当于git pull origin dev的第一步,并不会在本地创建新的分支。另外git fetch origin dev这个命令可以用来测试远程分支dev是否存在。

git fetch origin dev :branch1

上面这个命令的执行过程如下

  1. 首先执行上面的fetch操作
  2. 使用远程dev分支在本地创建branch1分支(但不会切换到该分支)
  3. 如果本地不存在branch1分支,则会自动创建一个新的branch1分支,如果存在branch1分支,并且是fast forward,则会自动合并这2个分支,否则会阻止以上的操作。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从决定做到正式测试自媒体,已经有一个多月了。 这一个多月,我写了不下于50篇原创的文章,从一个淘宝店主转型到自媒体...
    夏歌有话说阅读 5,484评论 0 0
  • 在25号公益课前一天,受邀参加了素心源读书会的一个活动,作者见面会;这个作者肯定不是我,熟悉的人都应该猜到...
    尹逊涛阅读 4,187评论 0 1
  • 年少时光,我们爱谈未来和理想,说长大以后,会牵对方的手去流浪,那时总盼望快点儿长大,转眼却开始留恋,那纯真年少时光...
    浅轻细语阅读 3,405评论 2 2
  • 一直想整理关于计算机网络相关的资料,虽然网上有很多详细的讲解,但是总是看过就忘了,所以为了治我这毛病,我还是将看过...
    李周阅读 3,342评论 2 1

友情链接更多精彩内容