当前位置:   article > 正文

git pull原理

git pull

1. git fetch

如果远程仓库新建分支,或者有新的commit,使用git fetch 会把本地对应的远程分支信息进行更新

在远程仓库新建一个dev 分支,并在远程dev分支上进行一次commit然后本地执行git fetch
在这里插入图片描述
可以发现本地仓库会有如下变化:

①是 objects文件夹下会多出3个目录,3个文件夹(对应远程dev分支的一次commit)
一个是blob对象, 一个是tree对象, 一个是commit对象
在这里插入图片描述
②同时本地会在refs/remotes下多出dev文件
③在logs下也会有dev文件
在这里插入图片描述
④关键地方是会生成FETCH_HEAD文件
在这里插入图片描述
FETCH_HEAD文件中存储的是远程仓库分支的最新信息
此时我们是在master分支上进行的git fetch,
那么FETCH_HEAD文件中第一行就是显示master分支的最新信息
在这里插入图片描述
如果此时我们切换到dev分支,那么那么FETCH_HEAD文件中第一行就是显示dev分支的最新信息
在这里插入图片描述
在这里插入图片描述

2. git pull = git fetch + git merge

我们在远程仓库的dev分支进行一次commit
到本地执行一次tree .git/ 查看git文件夹状态 ,此时是有19个文件夹,22个文件
在这里插入图片描述
为了更好演示git pull,我们本地切换到dev 分支进行git pull -v
(加上 -v 参数,可以查看更多信息)

git pull时 首先会执行git fetch, 先把本地的远程分支信息压缩到git-upload-pack文件然后post到远程仓库
这样git 把本地的远程分支与 远程仓库分支进行比较,才知道需要更新哪些信息
在这里插入图片描述
可以发现,这里git fetch 更新了本地的dev远程分支(因为我们在github上对dev分支进行了一次commit)
git fetch后, 执行了一次git merge(这里是fast - forward模式)
因此我们本地的dev 分支此时是落后于远程dev分支一个commit,所以这里是fast-forward模式

执行git pull后,本地的git文件夹数量也发送了变化,由之前的19个目录,22个文件变成了22个目录,26个文件
在这里插入图片描述
这里新增的目录和文件主要是执行了一次git fetch
本地会增加这一次commit对应的3个目录,3个文件;
同时还多了一个ORIGIN_HEAD文件
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

可以发现ORIGIN_HEAD文件中存储的是一个commit对象的hash值,而这个hash值正好是本地的dev分支合并之前所指的commit对象

这个ORIGIN_HEAD文件有什么用处呢??
可以用来回滚
比如,我们想撤销这一次git pull,想回到pull之前的状态,那我们可以执行
在这里插入图片描述
执行git branch -vv进行查看 ( 可以查看到本地分支与远程分支的同步关系)
在这里插入图片描述
可以发现本地dev分支已经回退,此时落后于远程dev分支一次commit
在这里插入图片描述

此时如果我们又想回到回到dev分支最新状态,可以在dev分支上于origin/dev进行merge
在这里插入图片描述
发现本地dev分支和远程dev分支保持同步!!
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/692458
推荐阅读
相关标签
  

闽ICP备14008679号