refspec 是什么
refspec 描述「抓取哪些引用、放到本地哪里」,写法是 [+]<源>:<目标>。前面的加号表示允许非快进更新目标引用,也就是远端被强推之后本地跟踪分支照样跟着覆盖。默认配置把远端分支映射到 refs/remotes/<远端>/ 下,形成远端跟踪分支——本地可以直接写 origin/main,靠的就是这条默认规则。
基本信息
| 语法 | [+]<源引用>:<目标引用> |
|---|---|
| 加号含义 | 允许非快进更新目标引用 |
| 配置键 | remote.<名称>.fetch |
| 默认行为 | 远端分支映射到 refs/remotes/<远端>/ |
| 只写源 | 结果写入 FETCH_HEAD 临时记录 |
典型使用场景
- 只取远端某个分支做差异比对,不建立本地分支
- 把远端特性分支抓成本地分支,先审查再决定是否合并
- 检查或修复 remote.origin.fetch 配置,解释为什么分支列表少了内容
- 用通配写法批量同步远端的全部分支
- 在带宽受限的环境里只抓需要的分支,减少传输量
- 排查跟踪分支缺失时确认引用的实际落点
常用示例
常用示例
git fetch origin # 按配置同步,只更新跟踪分支
git fetch origin main # 只取远端 main,结果先进 FETCH_HEAD
git fetch origin main:refs/remotes/origin/main # 明确指定目标引用
git fetch origin +refs/heads/*:refs/remotes/origin/* # 通配同步全部分支
git fetch origin feature:local-feature # 抓成本地分支 local-feature
git config remote.origin.fetch # 查看当前的 refspec 配置写法读法
| 写法 | 含义 | 注意事项 |
|---|---|---|
| origin main | 只写源 | 结果进 FETCH_HEAD,不生成稳定引用 |
| main:refs/remotes/origin/main | 明确映射 | 生成或更新对应的跟踪分支 |
| +源:目标 | 允许非快进 | 远端强推后本地跟踪分支会被覆盖 |
| 带通配符的写法 | 批量匹配引用 | 默认配置用的就是这种形式 |
想把远端内容抓成本地分支,两种写法都可行:在 refspec 里直接指定目标分支名,或者先抓取再基于远端跟踪分支创建本地分支。
命令里只写源而省略目标时,抓下来的提交只记录在 FETCH_HEAD 这个临时文件里,下一次抓取会覆盖它,不要把它当成稳定引用长期依赖。