Вот 4 шага, которые я нашел необходимыми или полезными (сначала важными):
git rm -f the_submodule
rm -rf .git/modules/the_submodule
git config -f .git/config --remove-section submodule.the_submodule
git commit -m "..."
Теоретически , git rm
в шаг 1 должен позаботиться об этом. Будем надеяться, что однажды на вторую часть вопроса ОП можно будет дать положительный ответ (что это можно сделать одной командой).
Но по состоянию на июль 2017 года шаг 2 необходим для удаления данных в .git/modules/
, иначе вы не сможете, например, добавить подмодуль назад в будущем.
Вероятно, вы можете избежать указанных выше двух шагов для git 1.8.5+, как заметил tinlyx , поскольку все команды git submodule
, похоже, работают.
Шаг 3 удаляет раздел для the_submodule
в файле .git/config
. Это должно быть сделано для полноты. (Запись может вызвать проблемы для более старых версий git, но я не могу ее протестировать).
Для этого большинство ответов предлагают использовать git submodule deinit
. Я считаю более понятным и менее запутанным использование git config -f .git/config --remove-section
. Согласно документации git-submodule , git deinit
:
Отмените регистрацию указанных подмодулей ... Если вы действительно хотите удалить
субмодуль из репозитория и коммит, использующий git-rm [1]
вместо .
И последнее, но не менее важное: если вы не git commit
, вы получите / можете получить ошибку при выполнении git submodule summary
(по состоянию на git 2.7):
fatal: Not a git repository: 'the_submodule/.git'
* the_submodule 73f0d1d...0000000:
Это независимо от того, выполняете ли вы шаги 2 или 3.