GitStash丢失后的完整找回指南
场景:本地分支有未提交的 git stash,合并远程分支后 stash 从列表消失,代码“不见了”。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
事故还原
- 在本地分支
test-eslint-copy上做了大量修改(props 清理、字段删除等) - 用
git stash暂存了这些改动 - 执行
git merge origin/test合并远程分支 - 合并后发现
git stash list里没有了自己的 stash,改动“消失”
根本原因:git stash 的记录存储在 refs/stash 引用链上。某些 git 操作(如带冲突的 merge、reset 等)会导致 stash 引用丢失,但 stash 的 commit 对象本身还在 git 对象库里,只是变成了“悬空对象(dangling commit)”,没有任何引用指向它。
找回步骤
第一步:确认 stash list 里真的没了
git stash list
如果你的 stash 不在里面,继续下一步。
第二步:用 fsck 找出所有悬空的 commit
git fsck --unreachable 2>&1 | grep "unreachable commit"
这会列出所有“孤儿 commit”,stash 就藏在里面。
第三步:过滤出属于你分支的 stash
stash commit 的 message 格式固定为 WIP on <分支名>: ,用这个特征过滤:
git fsck --unreachable 2>&1 | grep "unreachable commit" | awk '{print $3}' | while read c; do
msg=$(git log -1 --format="%s %ci" $c 2>/dev/null)
if echo "$msg" | grep -q "WIP on <你的分支名>"; then
echo "$c | $msg"
fi
done
把 <你的分支名> 替换成实际分支名,比如 test-eslint-copy。
输出示例:
469b4f36... | WIP on test-eslint-copy: 23996d8 fix: 再次处理eslint问题 2026-04-28 10:03:30 +0800 bcb74bf5... | WIP on test-eslint-copy: 14aa429 Merge branch 'test' 2026-04-28 09:54:12 +0800
第四步:确认是不是你要的那个
根据时间戳判断,然后看改动内容:
git show--stat
第五步:恢复
先处理工作区的干扰文件(如果有),再 apply:
# 如果有自动生成的文件挡路,先丢弃 git checkout -- src/dts/auto-imports.d.ts src/dts/components.d.ts # 恢复 stash git stash apply
关键原理
| 概念 | 说明 |
|---|---|
git stash |
本质是创建了 2~3 个特殊 commit,用 refs/stash 引用链串起来 |
| stash 丢失 | 只是引用链断了,commit 对象本身还在对象库 |
| dangling commit | 没有任何引用指向的 commit,git fsck 可以找到 |
git gc |
垃圾回收,会清理 dangling 对象。找回操作要在 gc 之前做! |
预防措施
合并前养成习惯:
# 合并前先把 stash 转成真正的 commit git stash pop git add . git commit -m "wip: 临时保存" # 合并完再 reset 回来 git merge origin/xxx git reset HEAD~1 # 把临时 commit 变回工作区改动
或者更简单,用 --autostash:
git merge --autostash origin/xxx
这样 git 会在合并前自动 stash、合并后自动 pop,不会丢。
总结一句话
stash 丢了不要慌,git fsck --unreachable 找悬空 commit,按时间戳认出来,git stash apply 直接恢复。只要没跑 git gc,数据就还在。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
使用 pandas assign 方法安全替换 NaN 值为自定义标记
使用 pandas assign 方法安全替换 NaN 值为自定义标记 在链式操作中,用 assign() 添加新列时需避免直接对 Series 使用 Python 原生 if-else,应改用向量化函数(如 np where)实现条件赋值。 在链式操作中,用 `assign()` 添加新列时需避免
如何在 pytest 中精准定位 traceback 中的特定异常类型与消息
如何在 pytest 中精准定位 traceback 中的特定异常类型与消息 在编写测试时,我们常常使用 pytest raises() 来断言某个函数会抛出预期的异常。但这里有个常见的“坑”:默认情况下,它只验证最外层抛出的那个异常。比如,一个函数最终抛出了 ValueError,pytest 就
高效合并两个二维数组:基于 product_id 的关联数据整合
高效合并两个二维数组:基于 product_id 的关联数据整合 本文介绍如何通过预构建哈希索引替代嵌套循环,以 O(n+m) 时间复杂度高效合并两个含公共键(product_id)的二维数组,显著提升性能并增强代码可读性。 在日常开发中,我们常常会遇到这样的场景:需要将来自不同数据源的两个二维数组
Pandas 条件驱动的循环填充:基于另一张表的动态 fillna 实战教程
本文详解如何利用 Pandas 结合条件筛选、布尔索引与 itertools cycle,实现跨 DataFrame 的循环式 fillna——即根据主表的分组条件(如 aa bb ),从权限表中按访问能力(Accessor1 Accessor2)轮询分配人员姓名,并自动循环复用。 在数据处理
如何在 Laravel 中跨控制器共享动态请求数据
本文介绍通过自定义中间件将一次请求中计算出的动态变量(如 $data1)注入到所有后续控制器请求中,实现安全、可维护的跨控制器数据共享。 在构建复杂的 Lara vel 应用时,我们常常会遇到一个典型场景:一个业务流程被拆分成多个步骤,比如一个多步表单。第一步,用户选择了预约的日期、时间和房间;第二
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题


