git - 我不想暂存/提交的子模块发生了变化。不幸的是,我无法恢复它。我应该怎么办?
问题描述
我正在从开源项目中获取/提取依赖项。我这样做是为了更新内容。有必要运行该程序。
当我这样做时,主存储库构建文件中发生了一些不需要的更改。Git 显示了发生的变化:
Changes are not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: _build/submodules/cl-webkit (new commits)
正如我所做的那样git diff
,我可以看到这是一个简单的更改:
$ git diff _build/submodules/cl-webkit/
diff --git a/_build/submodules/cl-webkit b/_build/submodules/cl-webkit
index cfc4f01e..29aeb74d 160000
--- a/_build/submodules/cl-webkit
+++ b/_build/submodules/cl-webkit
@@ -1 +1 @@
-Subproject commit cfc4f01ee806169d824750b4014653a93af9353d
+Subproject commit 29aeb74d854bd2ac52959ef3d793389d238636c5
更改保持未暂存和未提交状态。如果我尝试使用以下方法恢复它们:
$ git restore _build/submodules/cl-webkit/
我没有收到错误消息。但是,它不起作用。按下 后git status
,git 显示保持不变:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: _build/submodules/cl-webkit (new commits)
我应该怎么办?
这很烦人。如果我向开源项目提出拉取请求,我总是需要证明我是否意外添加(暂存)并提交了此更改。它至少发生了两次,维护人员要求我恢复提交并在没有它的情况下推送 PR。
解决方案
更新子模块的正确命令是git submodule update
git submodule update _build/submodules/cl-webkit
(我也很惊讶既git restore
没有也没有git checkout
工作)
由于子模块也是一个 git repo,您可以通过在该子模块中运行常规 git 命令来更新它:
# if you can afford to delete all changes, you can use 'reset --hard'
cd _build/submodules/cl-webkit
git reset --hard cfc4f01ee806169d824750b4014653a93af9353d