Menu
CoddyTech

Git Fetch vs Pull

最后更新

git fetch 从远程仓库下载最新的提交,但你的工作分支完全保持原样。git pull 做同样的下载,然后立即把这些提交合并到你的当前分支。简单来说:git pull = git fetch + git merge。

想先看清楚再行动时用 fetch;准备好整合时用 pull。在终端在线编辑器中两个都试试:浏览器里就有一个真正的 shell。

git fetch 下载新提交,只更新 origin/main,你的分支保持不动;git pull 会立即把它们合并进来。

并排对比

行为git fetchgit pull
下载远程提交是是
改变你的当前分支否是
可能引起合并冲突否是
相当于只下载fetch + merge

语法

命令作用
git fetch下载所有远程更改,不合并
git fetch origin main只从远程仓库获取一个分支
git pull获取并合并到当前分支
git pull --rebase获取,然后把你的提交变基到最新提交之上
git log HEAD..origin/mainfetch 之后:查看将要合并的内容

Git fetch 与 pull 常见问题

git fetch 和 git pull 有什么区别?
git fetch 下载新的提交并更新你的远程跟踪分支(比如 origin/main),但不会改变你的工作分支。git pull 先做同样的 fetch,然后把新提交合并到你的当前分支。所以 pull 会改变你的文件;fetch 只是更新你对远程仓库的了解。
git pull 就是 fetch 加 merge 吗?
是的。git pull 是先 git fetch,再把获取到的分支 git merge 到当前分支的简写。使用 git pull --rebase 时,第二步换成了变基而不是合并,这样历史会保持线性。
什么时候该用 fetch 而不是 pull?
当你想在整合之前先检查即将进来的更改时,用 git fetch。例如先 git fetch,再 git log HEAD..origin/main,准确地看看有哪些新内容。当你已经信任远程的更改、只想把它们合并到你的分支时,用 git pull。
git fetch 会引起冲突吗?

不会。fetch 只更新远程跟踪分支,从不碰你的工作分支或文件,所以不会产生合并冲突。冲突只会出现在合并这一步,pull 会自动执行这一步,而 fetch 不会。

可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里真正的 shell 中运行 git fetch 和 git pull,无需安装任何东西。Coddy 免费的互动式 Git 课程也会一步步讲解如何使用远程仓库。
Coddy 编程语言插图

在 Coddy 学习 Git

开始