(转)git fetch + merge 和 git pull 的区别
转自:http://blog.csdn.net/a19881029/article/details/42245955
Git fetch和git pull都可以用来更新本地库,它们之间有什么区别呢?
每一个本地库下都有一个.git的隐藏文件夹,文件夹中的文件保存着跟这个本地库相关的信息
首先来看下其中的config文件
- [core]
- repositoryformatversion = 0
- filemode = false
- bare = false
- logallrefupdates = true
- symlinks = false
- ignorecase = true
- hideDotFiles = dotGitOnly
- [remote "origin"]
- url = git@github.com:seanzou88/fetch.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
从这个文件中我们可以了解到:
1,本地库的当前分支为master,其关联的远程库名称为origin(不同的名称可以指向同一个远程库,参见git remote命令)
2,远程库origin所在的位置为(URL):git@github.com:seanzou88/fetch.git
然后可以查看.git文件夹下的HEAD文件:
- ref: refs/heads/master
其指向.git\refs\heads\master文件
- ce71505b3626a3648b2c32ea2081d65049cad300
这个文件中保存的是本地库中最新的commit id
.git\refs文件夹很有意思,面分为3个文件夹
heads文件夹前面说过了
remotes文件夹中的每一个文件夹代表一个远程库名称(git remote),其中的每个文件关联远程库的一个分支,其中保存该分支的最新commit id
.git\logs文件夹下保存的是.git\refs文件夹下相应文件的变更记录
准备工作到此结束,下面可以具体看看git fetch和git pull之间的区别了
git fetch origin
本地的latest commit id为:ce71505b3626a3648b2c32ea2081d65049cad300
githup上的latest commit id为:ab8cd391f978fe5384a78c92001ef8ae861046f0
before:
.git\refs\heads\master
- ce71505b3626a3648b2c32ea2081d65049cad300
.git\refs\remotes\origin\master
- ce71505b3626a3648b2c32ea2081d65049cad300
.git\logs\refs\heads\master
- 0000000000000000000000000000000000000000
- ce71505b3626a3648b2c32ea2081d65049cad300
- ......
- commit (initial): first commit
.git\logs\refs\remotes\origin\master
- 0000000000000000000000000000000000000000
- ce71505b3626a3648b2c32ea2081d65049cad300
- ......
- update by push
after:
.git\refs\heads\master(不变)
.git\refs\remotes\origin\master
- ab8cd391f978fe5384a78c92001ef8ae861046f0
.git\logs\refs\heads\master(不变)
.git\logs\refs\remotes\origin\master
- 0000000000000000000000000000000000000000
- ce71505b3626a3648b2c32ea2081d65049cad300
- ......
- update by push
- ce71505b3626a3648b2c32ea2081d65049cad300
- ab8cd391f978fe5384a78c92001ef8ae861046f0
- ......
- fetch origin: fast-forward
本地库并没有变化,也就是说,git fetch只会将本地库所关联的远程库的commit id更新至最新
HEAD没有变化很容易理解,因为本地库并没有变化
git pull origin master:master
本地的latest commit id为:3643a1a65fc88ae0e9f28f12168629758d027415
githup上的latest commit id为:64df093f73294d82a3adce9694871b9fac2aecfb
before:
.git\refs\heads\master
- 3643a1a65fc88ae0e9f28f12168629758d027415
.git\refs\remotes\origin\master
- 3643a1a65fc88ae0e9f28f12168629758d027415
.git\logs\refs\heads\master
- 0000000000000000000000000000000000000000
- 3643a1a65fc88ae0e9f28f12168629758d027415
- ......
- commit (initial): first commit
.git\logs\refs\remotes\origin\master
- 0000000000000000000000000000000000000000
- 3643a1a65fc88ae0e9f28f12168629758d027415
- ......
- update by push
after:
.git\refs\heads\master
- 64df093f73294d82a3adce9694871b9fac2aecfb
.git\refs\remotes\origin\master(不变)
.git\logs\refs\heads\master
- 0000000000000000000000000000000000000000
- 3643a1a65fc88ae0e9f28f12168629758d027415
- ......
- commit (initial): first commit
- 3643a1a65fc88ae0e9f28f12168629758d027415
- 64df093f73294d82a3adce9694871b9fac2aecfb
- ......
- pull origin master:master: fast-forward
.git\logs\refs\remotes\origin\master(不变)
本地库更新至最新,git pull会将本地库更新至远程库的最新状态
由于本地库进行了更新,HEAD也会相应的指向最新的commit id
所以虽然从结果上来看,git pull = git fetch + git merge,但是从文件中保存的commit id来看,实现上不是这样实现的
为了更好的理解,画了个图:
(转)git fetch + merge 和 git pull 的区别的更多相关文章
- git pull VS git fetch&merge
使用git fetch和git pull都可以更新远程仓库的代码到本地,但是它们之间还是有区别. git fetch git fetch origin master git log -p maste ...
- git pull VS git fetch&merge(good)
从图中可以看到,git fetch和git pull的区别, git fetch 不会自动的将结果merge到本地,只是将远程版本同步到本地版本库,而不会merge到本地副本. git pull 将 ...
- git fetch, merge, pull, push需要注意的地方(转)
在git操作中,我们经常会用到fetch, merge, pull和push等命令,以下是一些我们需要注意的地方. 给大家准备了参考资料: 1. Whatʼs a Fast Forward Merge ...
- git fetch, merge, pull, push需要注意的地方
在git操作中,我们经常会用到fetch, merge, pull和push等命令,以下是一些我们需要注意的地方. 给大家准备了参考资料: 1. Whatʼs a Fast Forward Merge ...
- How to get started with GIT and work with GIT Remote Repo
https://www.ntu.edu.sg/home/ehchua/programming/howto/Git_HowTo.html#zz-7. 1. Introduction GIT is a ...
- git pull和git fetch的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge Git fetch origin master git log ...
- Git fetch和git pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log - ...
- [转] git fetch与pull
原文: http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地 ...
- git fetch和git pull(转载)
From:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到 ...
随机推荐
- Codeforces Round 450 D 隔板法+容斥
题意: Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers ...
- C# WPF 一个设计界面
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF 一个设计界面 今天正月初三,大家在家呆着挺好,不要忘了自我充电. 武汉人民加油, ...
- Python面向对象设计小结
转自林海峰老师,学习之余做的笔记. class School: zhuti='学生和老师‘ def __init__(self,name,dic,country): self.mingzi=name ...
- Typora自动编号设置
找到C:\Users\用户名\AppData\Roaming\Typora\themes\路径下的base.user.css,用文本编辑器打开(若不存在,则自己创建一个),将一下内容复制进去,然后重启 ...
- cf938D
题意简述:n个点m条边的无向图,有点权,有边权, 对于每一个点计算,d(i,j)表示点i到点j的最短路 题解:边权扩大二倍,建立源点,然后源点向每一个点x连接一条权值为a[x]的边,然后跑最短路即可 ...
- linux系统挂载u盘拷贝文件
linux系统在不能远程的情况下用u盘传文件(比如服务器装上系统还没配IP),需要先将u盘挂载到系统中的某个位置,再使用cp命令拷贝文件,简要步骤如下: 1.把U盘插入Linux电脑,确保U盘指示灯是 ...
- mysql升级到5.7
最近遇到一个问题,执行下列语句会报错: CREATE TABLE `t_user` ( `USER_ID` bigint() NOT NULL AUTO_INCREMENT COMMENT '用户ID ...
- 浅谈python的第三方库——numpy(一)
python作为广受欢迎的一门编程语言,其中很重要的一个原因便是它可以使用很多第三方库. 对第三方库的理解,在笔者看来就是一些python爱好者和专门的研发机构,为满足某一特定应用领域的需要,使用py ...
- LCT[Link-Cut-Tree学习笔记]
部分摘抄于 FlashHu candy99 所以文章篇幅较长 请有足够的耐心(不是 其实不用学好splay再学LCT的-/kk (至少现在我平衡树靠fhq) 如果学splay的话- 也许我菜吧-LCT ...
- mac电脑怎么投屏?教你选择适合自己的Mac投屏软件
mac上有什么好的投屏软件嘛?苹果手机ios投屏到mac用哪款投屏软件,mac投屏ipad该用哪款软件怎么操作,macdown小编给大家介绍的这几款Mac投屏软件,各有各的特色,总有一款适合你投屏. ...