Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
# Adam Sharp
# Aug 21, 2013
# Usage: Add it to your PATH and `git remove-submodule path/to/submodule`.
# Does the inverse of `git submodule add`:
# 1) `deinit` the submodule
# 2) Remove the submodule from the index and working directory
# 3) Clean up the .gitmodules file
submodule_name=$(echo "$1" | sed 's/\/$//'); shift
exit_err() {
[ $# -gt 0 ] && echo "fatal: $*" 1>&2
exit 1
if git submodule status "$submodule_name" >/dev/null 2>&1; then
git submodule deinit -f "$submodule_name"
git rm -f "$submodule_name"
git config -f .gitmodules --remove-section "submodule.$submodule_name"
if [ -z "$(cat .gitmodules)" ]; then
git rm -f .gitmodules
git add .gitmodules
exit_err "Submodule '$submodule_name' not found"
Copy link

slintz commented Jul 6, 2017

I didn't run the script, but manually followed the steps - GREAT HELP!

One adjustment: git version 2.10.2 complains on line-23: fatal: not removing 'Abc/' recursively without -r So I reran with the extra flag and joy-joy! Someone (@sharplet ?) should fix that...

Copy link

melMass commented Jun 29, 2018

Thanks for this gist.

Line 25 is unnecessary. Git does remove it from the config now on git submodule deinit -f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment