我想在本地删除子模块而不将更改推送到主线。
这是我所做的:
https://gist.github.com/myusuf3/7f645819ded92bda6677
// 从 .git/config 中删除子模块条目
$ git submodule deinit -f my_submodule
//从超级项目的.git/modules目录中删除子模块目录
$ rm -rf .git/modules/my_submodule
// 删除.gitmodules中的条目并删除位于path/to/submodule的子模块目录
$ git rm -f my_submodule
现在这就是我现在所拥有的:
$ git status -s -uno
D my_submodule
问题> 如果我在本地提交此更改,然后将所有本地更改推送到主线,这些命令是否会导致子模块(即 my_submodule)从主线删除?
谢谢你
是的,它将在远程分支上删除。
由于更改被记录到提交中,因此当您推送时,子模块也将在远程分支上被删除。当您首先添加子模块时,发生了同样的事情。
如果您只想在本地删除它,您要么不需要提交删除,要么创建一个不会合并到主线中的分支。
您一直做得很好,直到
git rm -f my_submodule
:此命令将导致 git 状态更改(如您所见)。
当您想要删除子模块时仅在本地而不冒将此删除推送到远程的风险,例如当您之前使用
git submodule init ...
实例化 git 子模块,现在想要摆脱它们以及它们消耗的磁盘空间,同时仍然像以前一样在 git 存储库中跟踪它们时,那么您所需要的只是您指定的前两个 git 命令:
git submodule deinit -f my_submodule
或
git submodule deinit --all -f
如果您想一次性删除所有实例化的子模块。
加上删除本地子模块 git 数据库:
rm -rf .git/modules/my_submodule
请注意
git status
在这两个命令之后仍然会产生一个空的更改集,正如我们预期的那样:git 现在仍然知道子模块(通过
.gitsubmodules
),但不再占用磁盘空间用于本地实例化。
如果您以后改变主意,您可以随时运行新的
git submodule init
命令并使它们返回到 .gitmodule
指定的路径。