首页/开发/Git 与协作速查/子模块的提交指针模型
进阶与大仓实践69 条

子模块的提交指针模型

父仓库中的子模块记录的是「子树对象指向某次提交」,不是分支:切换父仓库分支会带着指针变化,理解这点才能正确更新与回滚子模块。

Git 与协作速查开发更新于 2026-10-12
本质gitlink 记录子模块提交 SHA(索引中的特殊条目)
切换父分支子模块目录不会自动跟着变,需要 submodule update
查看git diff --submodule / git submodule status

查看与更新

查看与更新
git ls-tree HEAD vendor/common
git diff --submodule HEAD~1
git submodule update --init --recursive
回滚父仓库提交后,子模块并不会自动回到旧指针,需要再执行一次 submodule update 才一致。

易错点

  • 父仓库回滚/切换分支后忘记 update,构建出的仍是新版本子模块代码
  • 子模块目录里直接切分支不影响父仓库记录,提交父仓库时只会记当前检出提交

数据来源与参考

  • Git 官方文档:git-submodule
  • Pro Git 2nd Edition · 7.11 子模块
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌