2 Ways of Resetting All Git Submodules in a Git Repository
Posted on In Programming, Software, TutorialGit submodule is a nice and convenient mechanism in Git to include the other Git repositories and manage the version/commit used from the submodule Git repository. However, there are cases where we would like “reset” the submodule, such as when we find updating a submodule repository will break the code tree, or merge some updates from others which update the submodules. In such cases, we may want to reset all submodules to the initial commit.
Method 1: Reset git submodules using foreach
command
This method is fast because it loops each submodule and runs git reset --hard
within each modules. The command is as follows.
$ git submodule foreach --recursive git reset --hard
However, it may fail under some cases, especially after a merging which remove/add submodules.
Method 2: Reset git submodules by deiniting and initing
If the method 1 does not work, we may use the second method by deinitalizing the submodules and reinitializing the submodules again. This will remove all submodules and reclone them again. So it will take more time than method 1. But this can fix many problems which leads to failures of simplying git reset
. The commands are as follows.
# unbinds all submodules
git submodule deinit -f .
# checkout again
git submodule update --init --recursive
The --recursive
option make git
recursively do update --init
under submodules in case these submodules also have submodules.