详解git fetch和git pull区别
git fetch和 git pull 都可以将远程仓库更新到本地,那么它们有什么区别呢?想要弄清楚这个问题,有几个概念不得不提。
fetch_head
是一个版本连接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。
commit-id
在每次本地工作完成后,都会做一个git commit操作提交当前操作到本地仓库,此时会产生一个commit-id,这是唯一一个能标识这个版本的序列号,在使用git push后,这个序列号还会同步到远程仓库。
git fetch
有了以上概念再来说说git fetch
这将更新git remote中所有的远程仓库所包含分支的commit-id,将其记录到.git/fetch_head文件中。
git fetch更新远程仓库的方式如下:
git pull
首先基于本地的fetch_head记录,比对本地的fetch_head记录与远程的的版本号,然后git fetch获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。所以可以认为: git pull = git fetch + git merge。
git pull的用法如下:
因此,git fetch是从远程获取最新版本到本地,但不会自动merge。
而git pull则是会获取所有远程索引并合并到本地分支中来。效果相同时git pull将更为快捷。