Skip to content

Instantly share code, notes, and snippets.

@nicktoumpelis
Created April 23, 2014 13:00
Show Gist options
  • Save nicktoumpelis/11214362 to your computer and use it in GitHub Desktop.
Save nicktoumpelis/11214362 to your computer and use it in GitHub Desktop.
Cleans and resets a git repo and its submodules
git clean -xfd
git submodule foreach --recursive git clean -xfd
git reset --hard
git submodule foreach --recursive git reset --hard
git submodule update --init --recursive
@lucasrangit
Copy link

lucasrangit commented Sep 19, 2022

git restore . --recurse-submodules

It resets the submodules back

Does it also take care of the git reset --hard --recurse-submodules to discard any changes in the working trees? If so, why do the git restore last and not first?

@hhe
Copy link

hhe commented Dec 2, 2022

The key for me was git submodule sync. Thank you @larsbrinkhoff @yuzhichang!

It's a sneaky issue whenever the URLs specified in .gitmodules get updated, but the old URLs continue to silently be used (as shown by git submodule foreach --recursive git remote get-url origin). Git should honestly warn us whenever the two are different.

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