Search code examples
gitgit-submodules

Restoring deleted submodules


Suppose that I have a submodule dir1/dir2 (created via the steps shown below). How do I restore the submodule dir2 after having deleted it?

git submodule update complains that the submodule does not exist, and git reset HEAD --hard restores dir2 but not its contents. I am creating the submodule in the following way :

mkdir dir1
cd dir1/
mkdir dir2

cd dir2/
touch 1.txt
git init
git add 1.txt
git commit -m "test"

cd ..
git init
git submodule add ./dir2/
git commit -m "adding submodule"

rm -r dir2
**** Now how do I restore dir2 and its contents? ****

Solution

  • Initializing a git repo within dir2 (cd dir2; git init) doesn't make dir2 a submodule.

    It just make dir2 a nested repo which will be ignored by any parent repo.
    Deleting dir2 means you have no direct way to retrieve its content.

    You could have done git submodule add /another/path/dir2, with dir2 a repo outside of dir1.
    Then it would have been possible to restore dir2.