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.

@SaSiNO97
Copy link

SaSiNO97 commented Oct 21, 2022

rm -rf is Linux/UNIX only, you shouldn't assume that we're all using Linux

@dptsolutions
Copy link

dptsolutions commented Oct 24, 2022

@SaSiNO97 - If you're not on a *NIX environment you are likely on Windows then, and you can use my Powershell variant I shared earlier in this thread.

@stevenbarragan
Copy link

stevenbarragan commented Oct 24, 2022

Thank you!

@JSAssassin
Copy link

JSAssassin commented Nov 2, 2022

Thank you. This is really helpful.

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