我有一个设置了子模块的项目。一位同事不小心删除了目标文件夹并创建了一个符号链接(指向项目文件夹之外),并提交了它。
现在,即使在删除链接并创建了一个空目录之后,我也无法再恢复子模块。.gitmodule 和 .git/config 没有改变。git submodule add 和 git submodule init 什么都不做。
我无法恢复有问题的提交,因为它还包含许多其他更改。
如何解决这个问题?
我有一个设置了子模块的项目。一位同事不小心删除了目标文件夹并创建了一个符号链接(指向项目文件夹之外),并提交了它。
现在,即使在删除链接并创建了一个空目录之后,我也无法再恢复子模块。.gitmodule 和 .git/config 没有改变。git submodule add 和 git submodule init 什么都不做。
我无法恢复有问题的提交,因为它还包含许多其他更改。
如何解决这个问题?
您需要恢复目录,因为它们在更改之前存储在您的存储库中。
重新创建那些子模块根目录将不起作用。
将起作用的是:
git checkout master@{2 days ago} -- path/to/submodule/directory
(例如,如果您知道子模块在 2 天前工作)
这将恢复一个空目录,该目录实际上是索引中的一个特殊条目。
然后 agit submodule update --init
将恢复其内容。
解决方案是删除子模块目标目录并重新添加子模块:
git rm libs/routing
git submodule add ../librouting.git libs/routing