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"

This comment has been minimized.

Copy link

@slintz 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...


This comment has been minimized.

Copy link

@melMass 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