恢复删除的子模块

Restoring deleted submodules

假设我有一个子模块 dir1/dir2(通过如下所示的步骤创建)。删除后如何恢复子模块 dir2

git submodule update 抱怨子模块不存在,git reset HEAD --hard 恢复 dir2 但不恢复其内容。我正在通过以下方式创建子模块:

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

dir2 (cd dir2; git init) 中初始化 git 存储库不会使 dir2 成为子模块。

它只是使 dir2 成为一个嵌套的 repo,它将被任何父 repo 忽略。
删除 dir2 意味着您无法直接检索其内容。

您本可以 git submodule add /another/path/dir2,使用 dir2 之外 dir1 的回购。
那么就可以恢复dir2.

如果您没有提交删除,您可以 提交所有其他本地更改,然后执行

git reset --hard

尝试通过以下两个命令“deinit”和“init”所有子模块:

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

如果你没有提交更改(至少) 你可以试试这个。它对我有用

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

就我而言,我认为还原不起作用,因为它有子模块,这解决了它。

但最重要的是我可以恢复对子模块所做的意外更改(一堆二进制文件创建警告)