Git Fetch vs Pull
最后更新
git fetch 从远程仓库下载最新的提交,但你的工作分支完全保持原样。git pull 做同样的下载,然后立即把这些提交合并到你的当前分支。简单来说:git pull = git fetch + git merge。
想先看清楚再行动时用 fetch;准备好整合时用 pull。在终端在线编辑器中两个都试试:浏览器里就有一个真正的 shell。
并排对比
| 行为 | git fetch | git pull |
|---|---|---|
| 下载远程提交 | 是 | 是 |
| 改变你的当前分支 | 否 | 是 |
| 可能引起合并冲突 | 否 | 是 |
| 相当于 | 只下载 | fetch + merge |
语法
| 命令 | 作用 |
|---|---|
git fetch | 下载所有远程更改,不合并 |
git fetch origin main | 只从远程仓库获取一个分支 |
git pull | 获取并合并到当前分支 |
git pull --rebase | 获取,然后把你的提交变基到最新提交之上 |
git log HEAD..origin/main | fetch 之后:查看将要合并的内容 |
Git fetch 与 pull 常见问题
git fetch 和 git pull 有什么区别?
git fetch 下载新的提交并更新你的远程跟踪分支(比如 origin/main),但不会改变你的工作分支。git pull 先做同样的 fetch,然后把新提交合并到你的当前分支。所以 pull 会改变你的文件;fetch 只是更新你对远程仓库的了解。git pull 就是 fetch 加 merge 吗?
什么时候该用 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 课程也会一步步讲解如何使用远程仓库。