artella
artella

Reputation: 5118

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? ****

Upvotes: 12

Views: 13751

Answers (4)

Karmavil
Karmavil

Reputation: 993

In case you didn't commit the changes (at least) you can try this. It worked for me

git restore path-to-your/submodule-name --recurse-submodules

In my case, I think the restore didn't work because it had submodules, and this solved it.

But most important I could restore the undesired changes made to the submodule (a bunch of binaries creating warnings)

Upvotes: 7

Unique
Unique

Reputation: 73

Try to "deinit" and "init" all the submodules by the following two commands:

git submodule deinit -f .
git submodule update --init

Upvotes: 4

rufreakde
rufreakde

Reputation: 632

If you did not commit your deletion you can just commit all your other local changes and then do

git reset --hard

Upvotes: -1

VonC
VonC

Reputation: 1324757

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.

Upvotes: 4

Related Questions