pull 与 fetch & merge
使用git fetch和git pull都可以更新远程仓库的代码到本地,但是它们之间还是有区别。
git fetch
git fetch origin mastergit log -p master..origin/mastergit merge origin/master
- 从远程的origin仓库的master主分支更新最新的版本到origin/master分支上
- 比较本地的master分支和origin/master分支的差别
- 合并内容到本地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则是一次性将远程仓库的代码更新到工作区(同时也会更新本地仓库)。
分支
分支(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=======