提问人:artella 提问时间:1/3/2015 更新时间:2/19/2022 访问量:11337
恢复已删除的子模块
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? ****
答:
4赞
VonC
1/3/2015
#1
在 () 中初始化 git 存储库不会生成子模块。dir2
cd dir2; git init
dir2
它只是创建一个嵌套的存储库,任何父存储库都将忽略该存储库。
删除意味着您无法直接检索其内容。dir2
dir2
你可以用 之外的 repo 来做。
然后就有可能恢复.git submodule add /another/path/dir2
dir2
dir1
dir2
评论
4赞
artella
1/3/2015
补充一点,对于您上面提到的设置,您的原始命令将恢复git submodule update --init
dir2
-1赞
rufreakde
5/6/2021
#2
如果您没有提交删除,您可以直接删除 提交所有其他本地更改,然后执行
git reset --hard
3赞
Unique
12/2/2021
#3
尝试通过以下两个命令“deinit”和“init”所有子模块:
git submodule deinit -f .
git submodule update --init
评论
0赞
jegadeesh
4/9/2022
这在删除子模块文件以恢复它们后尝试时有效。
0赞
Syed Faizan Ahmed
8/1/2023
这对我有用,谢谢
6赞
Karmavil
2/19/2022
#4
如果您没有提交更改(至少) 你可以试试这个。它对我有用
git restore path-to-your/submodule-name --recurse-submodules
就我而言,我认为恢复不起作用,因为它有子模块,这解决了它。
但最重要的是,我可以恢复对子模块所做的不需要的更改(一堆创建警告的二进制文件)
评论
0赞
Karmavil
8/1/2023
运行 git 命令时,当前工作目录中必须有一个 git 存储库。例如,如果我的文件夹有一个 git 存储库,我需要将我当前的工作目录移动到该目录,以运行 .如果您从不包含 git 存储库的文件夹运行 git status(或任何其他 git 命令),Git 将返回该确切的消息~/home/myrepo
git status
0赞
Karmavil
8/1/2023
也许您在“submodules”或“dependencies”文件夹中下载并解压缩了 zip 或 rar 文件。这可能是您的子模块中没有 git 存储库的原因
评论
git submodule update --init
不行吗?fatal: repository 'dir1/dir2' does not exist
mkdir dir1/dir2
git submodule update --init
.gitmodules