首页/开发/Git 与协作速查/子模块跟踪分支与 --remote 更新
进阶与大仓实践69 条

子模块跟踪分支与 --remote 更新

.gitmodules 中可配置 branch 指定子模块应跟踪的分支(默认跟随远端 HEAD),配合 submodule update --remote 拉取该分支并更新指针。

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

子模块跟踪分支是什么

.gitmodules 里可以给子模块配置 branch,指定它应跟踪的分支(不配时跟随子模块远端的默认分支)。配合 git submodule update --remote,子模块会拉到该分支的最新提交并把父仓库记录的子模块指针推进。是否提交这次指针变化由你决定,这正是跟随上游与锁定版本之间的开关。

基本信息

配置submodule.<名字>.branch = main
特殊值点号表示与父仓库当前分支同名
更新命令git submodule update --remote --merge(或 --rebase)
默认行为不配 branch 时使用子模块远端的默认分支
结果指针推进到远端分支顶端,未提交前不改变父仓库记录
核对git submodule status 显示当前指针与分支状态

典型使用场景

  • 内部组件跟随:子模块是自家库,希望同步其主干最新提交
  • 审查指针变化:git diff --submodule 看这次更新带来的提交区间
  • 分支对齐:monorepo 拆分后父子同分支名联动开发
  • CI 预检:定期更新指针跑集成测试,人工确认后提交

配置与更新

配置与更新
git config -f .gitmodules submodule.vendor/common.branch main  # 指定跟踪 main
git submodule update --remote --merge vendor/common            # 拉取远端并合并进工作区
git diff --submodule                                           # 查看指针与提交区间变化
git add vendor/common && git commit -m 'chore: 更新 common 指针'  # 确认后提交

三种跟随方式

配置行为适用
不配 branch跟随子模块远端默认分支简单场景
branch = 名称--remote 拉取指定分支稳定分支策略
branch = 点号跟随父仓库当前分支同名父子分支联动开发
--remote 会把指针推进到远端分支顶端,不提交就不会改变父仓库记录;不想升级就别提交这次指针变化。
生产仓库建议人工核对后再提交指针:自动更新引入未验证的上游提交是常见风险源,集成测试通过后再推;需要锁版本时改用普通 update 检出固定提交,不提交新指针。

易错点

  • 自动跟随引入未验证提交:远端新提交没经过你们测试就进指针,生产仓库必须人工审查,可加一个 CI 任务专门跑指针更新的集成测试
  • 合并与变基风格:--merge 会在子模块内产生合并提交,团队需约定统一策略避免历史混乱
  • 忘记提交指针变化:工作区变了但父仓库记录没变,队友拉不到你的更新,每次 update 后检查一次 git status
  • branch 配错分支名:--remote 会失败或跟随到意外分支,配置后用 git submodule status 核对

数据来源与参考

  • Git 官方文档:git-submodule(--remote、branch 配置)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌