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

Git中同时使用跟踪与非跟踪子模块的正确更新方法

解决混合子模块的批量更新问题

针对你同时存在非跟踪子模块(固定哈希)和跟踪分支子模块(绑定远程分支)的场景,这里有个无需手动指定子模块的自动更新方案:

核心思路

只筛选出配置了跟踪分支的子模块进行--remote更新,完全保留非跟踪子模块的固定哈希。

一键执行命令

直接在父仓库根目录运行这条命令:

git config --file .gitmodules --get-regexp '^submodule\..+\.branch$' | awk -F'[ .]' '{print $2}' | xargs -I {} git submodule update --remote {}

命令拆解

  • git config --file .gitmodules --get-regexp '^submodule\..+\.branch$':从.gitmodules配置文件中提取所有设置了branch属性的子模块(也就是你添加时用-b指定分支的跟踪子模块)
  • awk -F'[ .]' '{print $2}':解析输出,提取子模块的路径/名称
  • xargs -I {} git submodule update --remote {}:对每个找到的跟踪子模块,执行远程更新操作

进阶:做成Git别名(可选)

如果需要频繁执行,把命令封装成Git别名更方便:

  1. 打开全局Git配置文件(~/.gitconfig)或者当前仓库的.git/config
  2. 添加以下内容:
[alias]
    submodule-update-tracked = !git config --file .gitmodules --get-regexp '^submodule\\..+\\.branch$' | awk -F'[ .]' '{print $2}' | xargs -I {} git submodule update --remote {}

之后只需运行git submodule-update-tracked就能完成自动更新。

注意事项

更新完跟踪子模块后,如果要把这些子模块的最新哈希同步到父仓库,记得执行:

git add <跟踪子模块路径>
git commit -m "更新跟踪子模块到远程最新"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:22:17