You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code中突然无法查看访问stashed changes 如何恢复Git暂存内容

Stash丢失的常见诱因

Stash无法访问通常和.git目录异常直接相关,正常的stash条目会以特殊merge commit的形式存储在git对象库中,引用记录保存在.git/refs/stash文件内,常见触发丢失的场景包括:

  • VS Code打开的路径不是原仓库根目录,git识别到的仓库实例和你之前操作的不一致
  • .git/refs/stash文件被误删、被同步盘(OneDrive/iCloud等)同步时损坏,或是被安全软件误拦截
  • 手动执行过带强制清理参数的git gc操作,将stash对应的无引用对象清除
  • 仓库切换过git版本、或是执行过重置.git目录的操作,导致原有stash引用丢失
按优先级执行恢复操作

第一步:先校验当前仓库路径

在VS Code内置终端执行以下命令,确认当前识别到的仓库根目录是否正确:
git rev-parse --show-toplevel
如果输出路径和你之前存储stash的工作目录不一致,关闭VS Code重新打开正确的仓库根目录,再执行git stash list确认stash是否恢复可见。

第二步:从reflog中检索stash记录

只要stash对应的git对象没有被物理删除,所有stash操作都会在git引用日志中留下记录,不受refs/stash文件损坏的影响:

  1. 先执行stash专属reflog查询:
    git reflog show stash
  2. 如果输出中存在类似stash@{0}: WIP on <分支名>: <提交哈希> <提交说明>的条目,直接复制对应条目的哈希值,执行git stash apply <哈希值>即可将stash内容恢复到工作区;如果需要把条目重新加回stash列表,执行git stash store <哈希值>即可。
  3. 如果上述命令提示stash引用不存在,执行全量reflog查询:
    git reflog
    在输出结果中筛选提交信息以WIP on开头的条目,这类条目就是历史stash生成的提交,拿到哈希后按上述apply命令恢复即可。

第三步:全量扫描悬空commit定位stash

如果reflog已被清理,直接扫描git对象库中所有未被引用的commit,stash提交的说明固定以WIP on开头,可以快速定位:

  1. 执行命令列出所有无引用的commit:
    git fsck --unreachable --no-reflogs | grep commit
  2. 遍历输出的每一个commit哈希,查看提交基础信息确认是否为目标stash:
    git log --oneline -1 <commit哈希>
  3. 找到目标stash对应的哈希后,执行以下命令恢复内容:
    git stash apply <commit哈希>

注意:stash是特殊的merge类型提交,如果要用cherry-pick恢复,必须加-m 1参数指定主父提交,即git cherry-pick -m 1 <commit哈希>,否则会触发merge冲突报错。

第四步:物理损坏兜底方案

如果上述命令都无法定位到stash内容,说明.git目录下的对应对象文件已经损坏或被删除,可以查找本地同步盘的文件历史版本、仓库的本地备份,提取旧版本.git目录下的objects文件夹和refs/stash文件,覆盖回当前仓库后再重复上述恢复步骤。

内容的提问来源于stack exchange,提问作者benlee38b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:03:19