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

Git父模块执行git status未显示子模块新增提交问题排查

Git父仓库未检测到子模块版本超前变更的原因及解决方案

核心原因排查方向

  • 子模块忽略配置开启
    这是最高发的原因:父仓库的Git配置中可能开启了子模块忽略规则,导致状态检测跳过子模块的版本变更。
    排查命令:

    git config --list | grep -i submodule.*ignore
    

    如果返回结果包含submodule.Submodule.ignore=all、submodule.Submodule.ignore=dirty或者diff.ignoreSubmodules=all,说明规则生效:ignore=all会完全忽略子模块所有变更,diff.ignoreSubmodules=all会全局屏蔽所有子模块的变更检测,都会出现你遇到的情况。
    解决方法:移除对应忽略配置即可

    # 移除当前仓库的对应忽略规则
    git config --unset submodule.Submodule.ignore
    git config --unset diff.ignoreSubmodules
    # 如果是全局配置生效,加--global参数移除
    git config --unset --global submodule.Submodule.ignore
    git config --unset --global diff.ignoreSubmodules
    
  • 子模块路径被加入忽略规则
    不要仅检查.git/info/exclude,需要排查所有层级的忽略规则:父仓库根目录.gitignore、全局Git忽略配置。
    快速排查命令:

    git check-ignore -v Submodule
    

    如果有输出内容,就说明子模块路径被某条忽略规则匹配,找到对应规则删除即可。

  • Windows大小写不敏感导致路径不匹配
    Windows系统默认文件名大小写不敏感,如果子模块本地文件夹的大小写和父仓库中记录的路径大小写不一致,Git会无法识别变更。
    排查方法:对比git ls-tree HEAD Submodule输出的路径名和本地实际子模块文件夹名的大小写,不一致的话将本地文件夹名修改为和仓库记录完全一致即可。

  • git commit -a本身不暂存子模块版本变更
    Git的git commit -a仅会暂存已经跟踪的普通文件的修改,子模块的版本指针(gitlink)变更属于特殊记录,即便Git状态检测到了变更,也需要手动执行git add Submodule后再提交,commit -a不会自动处理这类变更。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:21:03