Git子模块出现非预期改动无法通过git restore恢复该如何处理?
你遇到的是Git子模块的典型问题:_build/submodules/cl-webkit是父仓库关联的Git子模块,你执行git restore仅作用于父仓库的文件索引,不会修改子模块内部的HEAD指向,因此改动无法被清除。
解决方案
1. 立即清除当前未暂存的子模块改动
直接执行子模块更新命令,强制将该子模块重置到父仓库当前版本记录的对应commit:
git submodule update --init -- _build/submodules/cl-webkit
执行完成后再运行git status,该未暂存改动就会消失。
2. 避免后续误提交子模块改动
可以通过本地配置忽略该子模块的所有改动,该配置仅对你本地仓库生效,不会影响上游仓库和其他协作者:
git config submodule._build/submodules/cl-webkit.ignore all
如果后续需要主动更新该子模块,再临时关闭该忽略配置即可。
3. 已误提交时的快速回退方法
如果已经将子模块改动提交到了本地分支,可通过以下命令回退该改动,不需要重新拉取分支:
# 重置父仓库中记录的子模块commit哈希 git checkout HEAD -- _build/submodules/cl-webkit # 修正最近一次提交 git commit --amend --no-edit
内容的提问来源于stack exchange,提问作者Pedro Delfino
相关产品推荐
相关产品推荐

