Git 移除仓库中的子模块(Submodule)

查看当前子模块 1 git submodule 输出类似: 1 a1b2c3d4 libs/foo (heads/main) 这里的 libs/foo 就是子模块路径。 也可以查看: 1 cat .gitmodules 输出类似: 1 2 3 [submodule "libs/foo"] path = libs/foo url = git@example.com:foo/bar.git 方法一:将 Submodule 转为普通目录(保留源码) 这种情况不直接删除目录,而是把子模块目录转换成普通目录。 Linux / macOS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## 子模块目录 SUBMODULE=libs/foo ## 注销子模块 ## 会移除 .git/config 中的 submodule 配置 git submodule deinit -f "$SUBMODULE" ## 仅从 Git 索引中移除 ## 不删除本地代码 git rm --cached "$SUBMODULE" ## 删除 Git 对子模块的本地缓存 rm -rf ".git/modules/$SUBMODULE" ## 删除子模块目录内部的 Git 指向 ## 这里的 .git 可能是文件,也可能是目录 rm -rf "$SUBMODULE/.git" ## 重新作为普通目录加入 Git git add "$SUBMODULE" ## 提交变更 git commit -m "convert submodule to normal directory" Windows PowerShell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## 子模块目录 $SUBMODULE = "libs/foo" ## 注销子模块 ## 删除 .git/config 中的 submodule 信息 git submodule deinit -f $SUBMODULE ## 仅从 Git 索引中移除 ## 不删除本地代码 git rm --cached $SUBMODULE ## 删除 Git 对子模块的本地缓存 Remove-Item -Recurse -Force ".git/modules/$SUBMODULE" ## 删除子模块目录内部的 Git 指向 ## 这里的 .git 可能是文件,也可能是目录 Remove-Item -Recurse -Force "$SUBMODULE/.git" ## 重新添加为普通目录 git add $SUBMODULE ## 提交变更 git commit -m "convert submodule to normal directory" 方法二:删除 Submodule(不保留源码) Linux / macOS 下面命令仅需修改 SUBMODULE 字段。 ...

2026年2月21日 · 2 分钟 · 浅忆