You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子模块提交新Commit后,父仓库中的子模块Commit ID是否会自动更新?

Git子模块提交新Commit后,父仓库的子模块Commit ID是否自动更新?

结论

父仓库中不会自动更新其记录的子模块Commit ID。你看到git submodule status输出的Commit ID变化,只是子模块本地工作区的HEAD指向了新提交,而非父仓库的版本控制记录被修改。

详细解释

  1. 父仓库如何记录子模块
    父仓库通过一个名为gitlink的特殊文件(对应子模块目录)存储子模块的特定Commit ID,这个ID会被纳入父仓库的版本控制。只有当你在父仓库中显式执行git add sub-repo并提交,才会更新父仓库记录的子模块Commit ID。

  2. 状态变化的含义
    从你的命令输出可以看到:

$ git submodule status
+8bfc4220fbd6c941e493bfa790d049c7169514f9 sub-repo (heads/main-1-g8bfc422)
  • 开头的+号表示:子模块当前工作区的Commit ID(8bfc422),与父仓库gitlink中记录的旧Commit ID(b39a213)不一致。
  • 这个变化仅发生在子模块的本地工作区,父仓库的gitlink记录并未被自动修改——你可以在父仓库执行git diff验证,会看到子模块目录显示为modified: sub-repo (new commits),这说明父仓库检测到了子模块的变化,但未将其纳入版本控制。
  1. 子模块新Commit的由来
    你在子模块目录中提交时,子模块处于*分离HEAD(detached HEAD)*状态(父仓库初始化子模块时,会直接检出指定的Commit而非分支)。此时提交的新Commit仅存在于子模块本地,父仓库不会自动跟踪这个变化。如果要让父仓库记录这个新Commit,需要回到父仓库执行:
git add sub-repo
git commit -m "update sub-repo to new commit 8bfc422"

内容的提问来源于stack exchange,提问作者StaY_Hungry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:32:17