在使用 Git 进行日常开发时,git stash 是一个非常方便的工具,用于临时保存工作目录的改动。然而,如果因为误操作或不慎执行了清理命令(例如 git stash clear)而丢失了重要的 Stash 记录,可能会造成不小的困扰。本文将详细介绍如何利用 Git 的内部机制,特别是悬空对象(Dangling Objects),来定位并恢复那些看似丢失的 Stash 提交。
执行文件系统检查
使用 --no-reflog 选项可以确保我们只关注那些不被任何引用(包括 Reflog)指向的对象:
git fsck --no-reflog
PS D:\task\js\promptbox> git fsck --no-reflog
Checking object directories: 100% (256/256), done.
dangling commit 3f92868cce5f3136e9d718e0989380d5c00b7248
这里的 3f92868cce5f3136e9d718e0989380d5c00b7248 就是一个悬空提交的 SHA-1 ID。这些提交中很可能包含了我们丢失的 Stash 内容。
检查悬空提交的内容
接下来,我们可以使用 git show 命令来查看每一个悬空提交的具体内容和提交信息,以确定哪个是我们需要的 Stash。
git show 3f92868cce5f3136e9d718e0989380d5c00b7248
最终恢复:创建分支或应用 Patch
git stash apply 3f92868cce5f3136e9d718e0989380d5c00b7248