From 2865b12ed961e0d4d066e11c04052bd710cf24e2 Mon Sep 17 00:00:00 2001 From: li-chx Date: Sun, 16 Nov 2025 20:15:42 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=B8=8D=E4=BD=BF=E7=94=A8Git=20r?= =?UTF-8?q?eset=20=E6=81=A2=E5=A4=8D=E8=AF=AF=E5=88=A0=E9=99=A4=E7=9A=84?= =?UTF-8?q?=20Git=20Submodule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...使用Git reset 恢复误删除的 Git Submodule.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 2025-11/不使用Git reset 恢复误删除的 Git Submodule.md diff --git a/2025-11/不使用Git reset 恢复误删除的 Git Submodule.md b/2025-11/不使用Git reset 恢复误删除的 Git Submodule.md new file mode 100644 index 0000000..44d8fac --- /dev/null +++ b/2025-11/不使用Git reset 恢复误删除的 Git Submodule.md @@ -0,0 +1,48 @@ +--- +{ + title: "不使用git reset 恢复误删除的 submodule", + description: "这篇文章介绍了两种恢复误删除 Git Submodule 的方法:一种是使用 git reset 的简单方案,另一种是不使用 reset 的详细手动恢复步骤,帮助你在不改变提交历史的情况下修复子模块。", + draft: false, + type: "article", + created_at: "2025-11-16T16:34:11+08:00", + published_at: "2025-11-16T16:48:20+08:00", + updated_at: [ "2025-11-16T16:48:20+08:00" ], + category: '开发', + tags: [ "Git" ], + tech_stack: [ "Git" ], + tech_stack_percent: [ 1 ], + tech_stack_icon_names: [ "mdi:git" ], + tech_stack_theme_colors: [ "#f65f3d" ], +} +--- +## 如果你可以使用Git Reset +如果你可以使用 `git reset`,那么恢复误删除的 Git Submodule 非常简单: + +```bash +git reset --hard HEAD +git submodule update --init --recursive +``` +## 如果不能使用Git Reset +如果你不能使用 `git reset`,只想重新checkout误删除的Git Submodule,可以使用以下方法: +这里,我使用example作为submodule名字和路径,`.gitmodules` 配置如下: + +``` +[submodule "example"] + path = example + url = https://github.com/example/example +``` +使用以下命令: +```bash +git ls-tree HEAD example +``` +能得到类似如下结果: +``` +160000 commit c2459db584158403a05821f8a56327b9936cdbe1 example +``` +据此,执行以下命令恢复目标submodule: +```bash +git update-index --add --cacheinfo 160000,c2459db584158403a05821f8a56327b9936cdbe1,example +git submodule sync --recursive +git submodule update --init --recursive example +``` +这种恢复方法相较于重新执行git submodule add命令,不会出现新的submodule commit ID。 \ No newline at end of file