chst365's blog chst365's blog
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

chst365

DIV工程师
首页
  • Git
  • 网络
  • 操作系统
  • 浏览器
  • webpack
  • JavaScript
  • TypeScript
  • 性能
  • 工程化
  • React
  • 编程题
  • React技术揭秘
  • 算法
  • Node
  • 编码解码
  • NodeJS系列
  • Linux系列
  • JavaScript系列
  • HTTP系列
  • GIT系列
  • ES6系列
  • 设计模式系列
  • CSS系列
  • 小程序系列
  • 数据结构与算法系列
  • React系列
  • Vue3系列
  • Vue系列
  • TypeScript系列
  • Webpack系列
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • NodeJS系列

  • Linux系列

  • JavaScript系列

  • HTTP系列

  • GIT系列

    • 说说你对git reset 和 git revert 的理解?区别?
    • 说说对git pull 和 git fetch 的理解?有什么区别?
      • 一、是什么
      • 二、用法
        • fetch
        • pull
      • 三、区别
      • 参考文献
    • 说说你对版本管理的理解?常用的版本管理工具有哪些?
    • 说说Git中 fork, clone,branch这三个概念,有什么区别?
    • 说说你对git rebase 和 git merge的理解?区别?
    • 说说Git常用的命令有哪些?
    • 说说Git 中 HEAD、工作树和索引之间的区别?
    • 说说你对Git的理解?
    • 说说 git 发生冲突的场景?如何解决?
    • 说说你对git stash 的理解?应用场景?
  • ES6系列

  • 设计模式系列

  • CSS系列

  • 小程序系列

  • 数据结构与算法系列

  • React系列

  • Vue3系列

  • Vue系列

  • TypeScript系列

  • Webpack系列

  • 面试官
  • GIT系列
chst365
2023-06-28
目录

说说对git pull 和 git fetch 的理解?有什么区别?

# 说说对git pull 和 git fetch 的理解?有什么区别?

# 一、是什么

先回顾两个命令的定义

  • git fetch 命令用于从另一个存储库下载对象和引用
  • git pull 命令用于从另一个存储库或本地分支获取并集成(整合)

再来看一次git的工作流程图,如下所示:

可以看到,git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中

而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决

在我们本地的git文件中对应也存储了git本地仓库分支的commit ID和 跟踪的远程分支的commit ID,对应文件如下:

  • .git/refs/head/[本地分支]
  • .git/refs/remotes/[正在跟踪的分支]

使用 git fetch更新代码,本地的库中master的commitID不变

但是与git上面关联的那个orign/master的commit ID发生改变

这时候我们本地相当于存储了两个代码的版本号,我们还要通过merge去合并这两个不同的代码版本

也就是fetch的时候本地的master没有变化,但是与远程仓关联的那个版本号被更新了,接下来就是在本地merge合并这两个版本号的代码

相比之下,使用git pull就更加简单粗暴,会将本地的代码更新至远程仓库里面最新的代码版本,如下图:

# 二、用法

一般远端仓库里有新的内容更新,当我们需要把新内容下载的时候,就使用到git pull或者git fetch命令

# fetch

用法如下:

git fetch <远程主机名> <远程分支名>:<本地分支名>
1

例如从远程的origin仓库的master分支下载代码到本地并新建一个temp分支

git fetch origin master:temp
1

如果上述没有冒号,则表示将远程origin仓库的master分支拉取下来到本地当前分支

这里git fetch不会进行合并,执行后需要手动执行git merge合并,如下:

git merge temp
1

# pull

两者的用法十分相似,pull用法如下:

git pull <远程主机名> <远程分支名>:<本地分支名>
1

例如将远程主机origin的master分支拉取过来,与本地的branchtest分支合并,命令如下:

git pull origin master:branchtest
1

同样如果上述没有冒号,则表示将远程origin仓库的master分支拉取下来与本地当前分支合并

# 三、区别

相同点:

  • 在作用上他们的功能是大致相同的,都是起到了更新代码的作用

不同点:

  • git pull是相当于从远程仓库获取最新版本,然后再与本地分支merge,即git pull = git fetch + git merge
  • 相比起来,git fetch 更安全也更符合实际要求,在 merge 前,我们可以查看更新情况,根据实际情况再决定是否合并

# 参考文献

  • https://zhuanlan.zhihu.com/p/123370920
  • https://segmentfault.com/a/1190000017030384
  • https://juejin.cn/post/6844903921794859021
#面试官
上次更新: 2025/04/11, 17:57:53
说说你对git reset 和 git revert 的理解?区别?
说说你对版本管理的理解?常用的版本管理工具有哪些?

← 说说你对git reset 和 git revert 的理解?区别? 说说你对版本管理的理解?常用的版本管理工具有哪些?→

最近更新
01
面试官
03-27
02
this&指针&作用域&闭包
03-27
03
前端
03-27
更多文章>
Theme by Vdoing | Copyright © 2019-2025 chst365 | 豫ICP备17031889号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式