Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
How effectively delete a git submodule.

To remove a submodule you need to:

  • Delete the relevant section from the .gitmodules file.
  • Stage the .gitmodules changes git add .gitmodules
  • Delete the relevant section from .git/config.
  • Run git rm --cached path_to_submodule (no trailing slash).
  • Run rm -rf .git/modules/path_to_submodule (no trailing slash).
  • Commit git commit -m "Removed submodule "
  • Delete the now untracked submodule files rm -rf path_to_submodule
@kevinmsantos
Copy link

kevinmsantos commented Apr 26, 2021

Value! Deu certo.

@andrp92
Copy link

andrp92 commented May 24, 2021

git submodule deinit <path_to_submodule>

Worked just perfect.! Thanks.!

@DDR0
Copy link

DDR0 commented May 24, 2021

@PingchuanMa
Copy link

PingchuanMa commented Jun 14, 2021

Thanks!

@sweeha
Copy link

sweeha commented Jun 17, 2021

Thanks!

@sharunspi
Copy link

sharunspi commented Jun 28, 2021

Thanks

@macagua
Copy link

macagua commented Aug 21, 2021

Thanks you very much, for me work perfect this tip!

@cthiebaud
Copy link

cthiebaud commented Aug 26, 2021

Merci beaucoup !

@Mason-Lin
Copy link

Mason-Lin commented Sep 7, 2021

thank you so much!

@Aschen
Copy link

Aschen commented Sep 10, 2021

Every time I want to remove a submodule, I come back to this Gist and follow the instructions. It's crazy how difficult it is to work with submodule.
Many thanks!

@ccwanggl
Copy link

ccwanggl commented Oct 4, 2021

This seems to be a more modern version (copied from https://stackoverflow.com/a/36593218/2066118):

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

We should upvote this answer

@mayujie
Copy link

mayujie commented Oct 12, 2021

I think above can be simplified using following commands. git submodule deinit <path_to_submodule> git rm <path_to_submodule> git commit-m "Removed submodule " rm -rf .git/modules/<path_to_submodule>

Thanks very helpful

@dptsolutions
Copy link

dptsolutions commented Oct 22, 2021

This seems to be a more modern version (copied from https://stackoverflow.com/a/36593218/2066118):

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

We should upvote this answer

For those of us on Windows, here's the equivalent in Powershell:

# Remove the submodule entry from .git/config
git submodule deinit -f path\to\submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm .git\modules\path\to\submodule -r -fo

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path\to\submodule

@lecksfrawen
Copy link

lecksfrawen commented Oct 30, 2021

Thanks!

@BenjaminWolfe
Copy link

BenjaminWolfe commented Dec 20, 2021

Thank you! Not all heroes wear capes!

@berkayyaman
Copy link

berkayyaman commented Dec 23, 2021

Thanks!

@wiratana
Copy link

wiratana commented Jan 1, 2022

Thanks bro!

@LW-Ho
Copy link

LW-Ho commented Jan 12, 2022

Thanks!

@vincent-picaud
Copy link

vincent-picaud commented Jan 19, 2022

If you use Magit (under Emacs), go to your project root and then:

M-x magit-list-submodules

then

M-x magit-submodule-remove

you will be asked which submodule you want to remove. That's it :)

@Icy-Thought
Copy link

Icy-Thought commented Mar 22, 2022

If you use Magit (under Emacs), go to your project root and then:

M-x magit-list-submodules

then

M-x magit-submodule-remove

you will be asked which submodule you want to remove. That's it :)

Alternatively: Launch magit from your project (does not matter if you are nested inside sub-directories of your project or not)
-> ' to select the submodules option.
-> -f (force) + k (removal) to prevent local changes error.
-> Select the submodule you ought to remove from your repository.
-> Done!

Why? Because I was, oddly enough, unable to find my repository's submodules by following the steps you had mentioned in your comment.

@vincent-picaud
Copy link

vincent-picaud commented Mar 22, 2022

@Icy-Thought that's curious, what is your magit version? mine is
Magit v3.3.0-199-g036f5cb7, Git 2.35.1, Emacs 27.1, gnu/linux

@Icy-Thought
Copy link

Icy-Thought commented Mar 22, 2022

@Icy-Thought that's curious, what is your magit version? mine is Magit v3.3.0-199-g036f5cb7, Git 2.35.1, Emacs 27.1, gnu/linux

Magit 4e29d582, Git 2.35.1, Emacs 28.0.91, gnu/linux (using doom-emacs)

@Godsmith
Copy link

Godsmith commented Apr 6, 2022

FYI, removing a git submodule is much simpler now with a modern Git version in 2022. Just run git rm <path-to-submodule> and commit.

Taken from here: https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule

@min-hinthar
Copy link

min-hinthar commented May 14, 2022

It works. Thanks for the share! Have fun coding.

@RecoX
Copy link

RecoX commented May 23, 2022

This seems to be a more modern version (copied from https://stackoverflow.com/a/36593218/2066118):

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

We should upvote this answer

Done!

@psytron
Copy link

psytron commented May 27, 2022

I think above can be simplified using following commands.
git submodule deinit <path_to_submodule>
git rm <path_to_submodule>
git commit-m "Removed submodule "
rm -rf .git/modules/<path_to_submodule>

true works efficiently. Thnks

Excellent!

@slo-addy
Copy link

slo-addy commented Jun 2, 2022

Life saver! Thank you.

@jairusjoer
Copy link

jairusjoer commented Aug 11, 2022

Thanks 🔥

@coeneivan
Copy link

coeneivan commented Sep 18, 2022

👍

@panozzaj
Copy link

panozzaj commented Sep 22, 2022

Building on the answers above...

If you're doing this a lot, you can create an executable script discoverable in your PATH named git-submodule-remove with the following contents: https://github.com/panozzaj/conf/blob/master/common/bin/git-submodule-remove

Then you can run git submodule-remove path/to/submodule to quickly remove it.

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