Git中fetch和pull命令的区别
来源:互联网 发布:淘宝积分在哪里查看 编辑:程序博客网 时间:2024/06/05 04:20
两者具体的区别
fetch
Git中的fetch命令是将远程分支的最新内容拉到了本地,但不立即将远程分支的变更合并到本地分支上。当我们执行完fetch命令后,在执行git branch命令会发现此时后本地多了一个FETCH_HEAD的分支。我们可以checkout到该分支查看远程分支的最新内容。以便于我们有机会查看远程分支都做了什么改动。
当我们检查完成后在checkout回本地分支执行merge命令进行合并。合并后如果出现冲突则需要我们手动解决冲突,然后在commit一次。pull
pull的相当于fetch和merge的这两步操作,Git底层帮我们实现了:
git fetch origin mastergit merge FETCH_HEAD
如果存在冲突,同样需要我们自己手动解决冲突,解决完成后再一次进行commit操作。
Tip-1: 理解git fetch的关键是理解FETCH_HEAD,FETCH_HEAD指的是:某个分支在服务器上的最新状态。
Tip-2:在进行 fetch 操作时可能存在2种情况:
- 如果没有显示地指定远程分支,则远程的master分支将作为默认的FETCH_HEAD。
git fetch origin
相当于
git fetch origin master
- 如果指定了远程分支,则将指定的远程分支作为 FETCG_HEAD。如:
git fetch origin dev
设定当前分支的 FETCG_HEAD 为远程服务器的dev分支。相当于git pull origin dev的第一步(但并不会在本地创建新的分支)。
使用Fetch命令来嗅探远程分支是否存在
例如我们使用fetch命令来测试远程分支dev是否存在。
git fetch origin dev :local_branch
上面这个命令的执行过程如下:
- 首先执行上面的fetch操作
- 使用远程dev分支在本地创建local_branch分支(但不会切换到该分支)
- 如果本地不存在 local_branch 分支,则会自动创建一个新的 local_branch 分支; 如果存在 local_branch 分支,并且是fast forward,则会自动合并这2个分支,否则进行任何操作。
概念补充
- Git中分支的概念:
分支是用来标记特定代码的提交,每一个分支通过SHA1 sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1 sum值。
如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。
A----C----E(master) \ B---D---F(dev)
它们的head指针分别指向E和F,对上述做如下操作:
git checkout mastergit merge dev
之后的情形是这样的:
A---C---E---G(master) \ / B---D---F(dev)
现在A,B, C, D, E, F, G属于master,G是一次合并后的结果,是将 E 和 F 的代码合并后的结果,可能会出现冲突。而A, B,D, F依然属于dev分支。可以继续在dev的分支上进行开发:
A---C---E---G---H(master) \ / B---D---F---I(dev)
- Git中fetch和pull命令的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- Git fetch和git pull的区别
- git fetch和git pull的区别
- ----- UVA 11624-Fire!
- windows 如何定时更新svn
- Maven仓库镜像
- 二叉树的基本应用及其他
- 2017 Multi-University Training Contest
- Git中fetch和pull命令的区别
- sudo 命令能为你做些什么
- 求解最大连续子数组问题
- (2)window方法:confirm、setTimeout、setInterval、clearInterval、moveBy和moveTo、open和close
- CodeForces
- HDU 6070 Dirt Ratio 线段树 + 二分
- 201412-2 Z字形扫描
- 问题 E: YK的书架
- Agri-Net (最小生成树)