git pull fetch 更新本地文件区别


http://my.oschina.net/xinxingegeya/blog/496278

Git中pull对比fetch和merge

使用git fetch和git pull都可以更新远程仓库的代码到本地,但是它们之间还是有区别。

git fetch

git fetch origin master
git log -p master..origin/master
git merge origin/master
  1. 从远程的origin仓库的master主分支更新最新的版本到origin/master分支上

  2. 比较本地的master分支和origin/master分支的差别

  3. 合并内容到本地master分支

git pull

相当于git fetch 和 git merge,即更新远程仓库的代码到本地仓库,然后将内容合并到当前分支。

所以,简单的说git pull相当于git fetch后再做一个git merge。那么它们具体的区别如何分析呢,这就需要我们再认识下git了,先看看下面这张图:

我们知道,git其实有好几个区,工作区(workspace)、暂存区(index)、本地仓库(local repository),当然还有远程仓库(remote repository)。远程仓库为我们保存一份代码拷贝,如github,而工作区、暂存区和本地仓库都在本地,这就是为什么没有网络我们也照样使用git提交(commit)代码更新,因为提交仅是提交到本地仓库,待有网络之后可以再推送(push)到远程仓库。

正如上图所示,git fetch是将远程仓库的更新获取到本地仓库,不影响其他区域。而git pull则是一次性将远程仓库的代码更新到工作区(同时也会更新本地仓库)。

通常来说,git fetch和merge与git pull的区别已经很明显了,但是如果想再了解下git是如何操作的,则需要我们了解下分支这个git的强大特性(分支的概念确实太牛逼了,我不确定我的理解是否是正确的)。

分支

分支(branches)是用来标记特定的代码提交,每一个分支通过SHA1sum值来标识,所以对分支进行的操作是轻量级的——你改变的仅仅是SHA1sum值。所以为什么git提倡大家多使用分支,因为它即轻量级又灵活。简单的说,分支有两种:

本地分支(local branches)” ,当你输入“git branch”时显示的:

git branch
  * master

远程分支(remote branches)” ,当你输入“git branch -r”是显示的:

git branch -r
  origin/master

如果你对分支在本地是如何存储感兴趣的话,看看项目中的下面文件,文件里面存的就是一个SHA1sum值:

.git/refs/head/[本地分支]

.git/refs/remotes/[正在跟踪的分支]

=======END=======

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值