Git Fetch - Git pull

Git Fetch - Git pull

其实网上有很多的比较,说的比较清楚了,git fetch 和 git pull之间的距离只差一个merge。emmmm我想总结一下他俩相似的操作究竟有什么不同。

我们从常用操作来逐步了解他的merge到底是差在哪里

git fetch origin <远端分支> vs git fetch origin <远端分支>

在这里插入图片描述

  • git fetch origin <远端分支>

在我们fetch的时候会发现并没有改变HEAD的指向,只有当merge FETCH_HEAD的时候才会改变HEAD方向。
第一次fetch的时候会把远端分支的状态存在FETCH_HEAD文件中

6a7a1bafaf7d25f965a36a2db535312e83a71d07		branch 'vv' of GITHUB_URL
  • git pull origin <远端分支>

我们在pull远端分支的时候会发现他的指针直接指向了add vv这里,此时git pull比git fetch多的merge操作是merge的FETCH__HEAD

git fetch origin <远端分支> : <本地已有分支> vs git fetch origin <远端分支>:<本地已有>

在这里插入图片描述

注意当前操作的分支是master分支!

  • git fetch origin <远端分支>:<本地已有分支>

此操作我们会看到他直接merge了本地已有的分支,跳过了merge FETCH_HEAD的操作,到达了add vv的指针。

  • git fetch origin <远端分支>:<本地已有分支>

此操作首先是跟fetch一样的在目标分支上进行了跟远端分支的同步,但是!master分支,也就是我们本地现在所在的分支进行了一次merge 远端分支的操作,让master的指针到达了add vv。

此时我们可以看出pull比fetch多出的merge操作是在当前所操作分支的一次merge。

由此我们可以假设,当pull操作目标的分支和当前所处的分支是一样的,那么fetch和pull操作的结果就是一样的

在这里插入图片描述

git fetch origin <远端分支>:<本地没有的分支> vs git pull origin <远端分支>:<本地没有的分支>

在这里插入图片描述

  • git fetch origin <远端分支>:<本地没有分支>

右边的图我们可以发现fetch创建了本地没有的分支到自己本地,并且新创建的分支的HEAD指向远端最新的HEAD

  • git pull origin <远端分支>:<本地没有分支>

左边图我们可以发现前面跟fetch其实差不多,但是还是多出了master merge的操作,使master的HEAD也指向了最新。

为什么fetch一直在其他分支

在当前分支操作可以,但是只限于git fetch和git fetch origin <远端分支>,只要带上本地分支就会提示如下信息。

$ git fetch origin xx1:xx
fatal: Refusing to fetch into current branch refs/heads/xx of non-bare repository

总结

fetch和pull确实只是存在merge差异,但是merge的东西是截然不同的。单纯的写git fetch和git pull他们的merge是差在FETCH_HEAD,其他带origin <远端分支>的操作相差在当前所在的分支的一次merge,关于是merge远端分支还是目标分支还有待探究,但我感觉是merge远端分支。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值