前端错题集|git pull 和git fetch的区别是什么?

Git是工作中常用的工具,现在关于Git命令的问题在面试中也越来越常见。相信大家对常用的命令都非常熟悉了,但是可能没有深究过细节。今天小编就帮大家分析一下git pull 和 git fetch的区别。

image

二者的区别可以这样简单的理解:**git pull = git fetch + git merge **。面试如果遇到这个问题可以先给出这样的回答,面试官就会觉得你理解了核心的区别。

那git ftech做了什么事情呢?先说两个概念:

FETCH_HEAD: 是一个版本链接,记录在本地的.git/FETCH_HEAD文件中,指向着目前已经从远程仓库取下来的分支的末端版本。

commit-id:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程仓库。

image

FETCH_HEAD文件及其内容

git fetch会更新git remote 中所有的远程仓库所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中。 也会拉取代码到分支,只是不会合并。

例如获取master分支的提交更新:

git fetch origin master

fetch后可以通过命令 **git log -p FETCH_HEAD **查看更新的提交内容:

image

在fetch之后,可以用git diff查看改动,git merge合并代码。

git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。所以可以认为git pull是git fetch和git merge两个步骤的结合。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,查看所有远程分支:%git branch -r 2, 拉取远程分支并创建本地分支git checkout -...
    will666阅读 2,102评论 0 18
  • git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git b...
    猿万阅读 5,116评论 1 45
  • 《动物大逃亡》是安徒生奖获奖作家米拉·洛贝的作品。这是一本非常有趣的书,作者丰富的想象力和栩栩如生的描写让动...
    佳儿717阅读 536评论 0 0
  • [TOC] 内容 时间:2016/12/27 耗时20分钟 截图 总结 身的一撇和勾要隔的远一些,也就是最长的那个...
    上山老人阅读 150评论 0 0
  • 在南国的冬天里,那满世界的花儿开得热闹,开得妖艳,让我这个一直生长在北方的女子心生狂喜,这样温情的冬天怎么可以轻易...
    秋之语阅读 772评论 2 6