Git 如何仅删除子模块引用而不删除子模块仓库本身?
Git 移除子模块引用且保留本地文件的操作方案
普通的子模块删除命令会同步删除本地子模块文件,以下操作仅清除主仓库的子模块关联记录,不会修改工作区的子模块文件内容。
操作步骤
- 第一步:执行带
--cached参数的删除命令,仅移除暂存区中的子模块跟踪记录,不触碰本地文件
注意将命令中的<子模块相对路径>替换为你实际的子模块路径,不要在路径末尾加斜杠git rm --cached <子模块相对路径> - 第二步:编辑主仓库根目录下的
.gitmodules文件,删除对应子模块的配置段落,示例需要删除的段落格式如下:[submodule "xxx"] path = xxx url = git@xxx.com:xxx/xxx.git - 第三步:检查主仓库的
.git/config文件,如果存在对应子模块的同名配置段落,同样删除即可 - 第四步:提交改动到主仓库
git add .gitmodules git commit -m "移除<子模块名>的子模块关联,保留本地文件"
注意事项
- 请勿使用
git submodule deinit命令执行该操作,该命令会直接清空本地子模块目录内的所有内容 - 操作完成后,原有的子模块目录会变为主仓库的普通未跟踪目录,你可以根据需要选择将其添加到主仓库跟踪列表,或写入
.gitignore忽略提交
内容的提问来源于stack exchange,提问作者Maciejek
相关产品推荐
相关产品推荐

