赞
踩
如果远程仓库新建分支,或者有新的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分支的最新信息
我们在远程仓库的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分支保持同步!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。