如何撤销意外执行的git stash pop并恢复原stash消息?
如何查看和找回Git Stash的自定义消息
我完全懂你的痛点——那些存在stash消息里的进度说明、暂存原因,对衔接后续工作来说真的太关键了。结合你的需求,分两种场景给你实用的解决方案:
一、查看未被pop的Stash消息
要快速查看所有已保存的stash及其自定义消息,直接运行这条命令就行:
git stash list
它的输出会是这样的格式,冒号后面就是你当初用git stash save设置的消息:
stash@{0}: On feature/payment: 完成支付接口参数校验,待联调 stash@{1}: On develop: 临时添加性能监控埋点,测试后移除
二、找回已pop的Stash消息及内容
你说git stash pop不会出现在reflog里,但其实stash本质是一个Git提交对象,只要还没执行过git gc这类清理垃圾对象的操作,就能把它找回来:
- 先找出所有悬空的提交对象(被pop的stash就属于这类):
git fsck --no-reflog | grep "dangling commit"
- 对每个查到的提交哈希,用
git show查看详情,里面会包含你设置的stash消息:
git show <查到的提交哈希>
在输出的开头就能看到熟悉的消息:
commit 8a7b6c5d4e3f2a1b2c3d4e5f6a7b8c9d0a1b2c3d Merge: 123abc 456def Author: 你的名字 <你的邮箱> Date: Thu Oct 12 10:15:00 2023 +0800 On feature/payment: 完成支付接口参数校验,待联调
- 如果确认是你要找的stash,还能把它恢复回来:
git stash apply <查到的提交哈希>
最后给个小建议:现在Git更推荐用git stash push -m "你的消息"替代git stash save,功能完全一致,但属于更现代的用法,后续管理起来体验也没差别。
内容的提问来源于stack exchange,提问作者Kalle Richter
相关产品推荐
相关产品推荐

