首页/开发/Git 与协作速查/git fetch 只下载不合并
Git 基础与命令88 条

git fetch 只下载不合并

从远端取回对象与引用更新而不动工作区:把远端变化安全地拿到本地,评审后再决定合并或变基。

Git 与协作速查开发更新于 2026-10-13

git fetch 是什么

git fetch 从远端取回新的对象与引用更新,但不改动当前分支与工作区。远端跟踪引用(例如 origin/main)会被更新,你自己的工作区保持原样,之后可以慢慢决定合并还是变基。它是比 pull 更可控的同步方式。

为什么值得先 fetch

直接 pull 会在同一个动作里完成取回与集成,一旦结果不符合预期,就得在已经变化的历史里找原因。先 fetch 能把两件事拆开:取回之后用 git log HEAD..origin/main 看清上游到底多了什么,确认无误再决定集成方式。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git fetch [远端] [分支]
与 pull 区别只更新远端跟踪引用,不动当前分支与工作区
常用参数--all;--prune;--dry-run;--tags
结果落地更新 origin/* 这类远端跟踪引用
是否联网需要网络访问远端仓库

典型使用场景

  • 评审上游:先取回,再用区间日志看远端比本地多了什么
  • 替换 pull:把取回与集成分成两步,避免隐式合并
  • 清理引用:用 --prune 去掉远端已删除分支的本地跟踪引用
  • 流水线预取:CI 中先 fetch,再决定检出哪些提交
  • 浅克隆加深:用 fetch --depth 或 --unshallow 补齐历史

常用示例

常用示例
git fetch origin                     # 取回 origin 的更新
git fetch --all --prune              # 取回所有远端并清理失效引用
git fetch origin main                # 只取指定的分支
git log --oneline HEAD..origin/main  # 看远端比本地多了哪些提交
git diff HEAD origin/main --stat     # 看两边差异的规模
git fetch --dry-run                  # 演练,不真正取回

fetch 与集成动作的差别

动作当前分支工作区
git fetch不变不变
git merge origin/main前进或产生分叉被更新
git rebase origin/main本地提交被重写被更新
git pull取决于配置被更新
fetch 之后当前分支不会自动变化,必须再执行 merge 或 rebase,变化才会真正落到你的分支上。
评审上游进展的常见姿势:先 fetch,再用区间日志 HEAD..origin/main 看远端多了哪些提交,确认之后再决定集成方式。
取回之后想进一步确认差异,可以用 git diff HEAD origin/main --stat 看规模,用 git branch -vv 看每条本地分支的领先与落后数,再决定对哪条分支做什么。

易错点

  • fetch 之后当前分支不会自动变化,需要 merge 或 rebase 才会真正合入
  • 大仓库里无条件执行 fetch --all 耗时可观,日常只取需要的远端与分支
  • 远端已删除的分支不加 --prune 会一直留在本地引用列表里,干扰判断
  • 浅克隆里 fetch 得到的历史仍不完整,做历史分析前先用 --unshallow 补齐

数据来源与参考

  • Git 官方文档:git-fetch
  • Pro Git 2nd Edition · 2.5 远程仓库的使用
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌