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

如何批量取消嵌套仓库的子模块状态并推送到GitHub主仓库?

解决Git嵌套仓库无法推送内容的问题

Git会把包含.git目录的子文件夹识别为子模块/嵌套仓库,不会追踪里面的内容,只会在主仓库里留下空占位记录,导致GitHub上显示空文件夹。下面提供两种无需手动删除所有.git目录的解决方法:

方法一:强制添加所有内容(最简单)

直接在主仓库根目录执行命令,强制让Git把嵌套仓库里的内容当作普通文件追踪:

git add . --force

接着提交并推送:

git commit -m "添加所有课件/练习内容(包含嵌套仓库文件)"
git push

原理:--force参数会覆盖Git默认的子模块识别逻辑,强制将所有文件(包括嵌套仓库内的内容)加入暂存区,忽略子模块的特殊处理。

方法二:清除子模块缓存后重新添加

如果方法一未生效,可先清除Git已缓存的子模块条目,再重新添加内容:

  1. (可选)查看当前被识别为子模块的路径,确认问题:
git ls-files --stage | grep 160000
  1. 批量移除所有缓存的子模块条目:
git rm --cached $(git ls-files --stage | grep 160000 | awk '{print $4}')
  1. 重新添加所有内容:
git add .
  1. 提交并推送:
git commit -m "修复嵌套仓库追踪问题,添加全部内容"
git push

原理:160000是Git中子模块条目的专属文件模式,通过上述命令可批量移除所有被标记为子模块的缓存记录,之后Git会将这些文件夹当作普通目录处理。

补充说明

  • 两种方法都会丢弃嵌套仓库的历史提交记录,仅保留当前状态的文件,完全符合你存档备份的需求。
  • 如果后续不需要保留这些子文件夹里的.git目录,也可以一次性批量删除(可选命令),避免后续再出现子模块识别问题:
find . -name ".git" -type d -exec rm -rf {} +

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:12:12