如何查看某个 stash 的具体改动内容(diff)
查看 stash 内容:git stash show -p 显示最新 stash 的完整 diff;指定某个用 git stash show -p stash@{2}。不带 -p 只看文件统计;应用前先在临时分支验证更稳妥。
用 git stash show -p:加 -p 显示最新 stash 的完整补丁;要看某一条,先 git stash list 找到编号,再 git stash show -p stash@{2}。不带 -p 只显示改动文件的统计摘要。
常用命令
git stash list # 列出所有 stash
# stash@{0}: WIP on main: a1b2c3d 最近的提交说明
# stash@{1}: WIP on main: e4f5g6h ...
git stash show -p # 最新 stash 的完整 diff
git stash show -p stash@{1} # 指定 stash 的 diff
git stash show stash@{1} # 只看统计(哪些文件、几行)
与工作区或指定分支对比
git stash show -p 展示的是 stash 相对其基准提交的改动。想拿 stash 内容与当前工作区直接比较,更直观的做法是应用到临时分支:
git stash branch check-stash stash@{1} # 从 stash 建分支
git diff main # 与 main 对比
应用与清理
git stash apply stash@{1} # 应用但保留 stash 条目
git stash pop # 应用并删除 stash@{0}
git stash drop stash@{1} # 只删不应用
常见问题(FAQ)
Q:stash 里的新文件(未跟踪)为什么不在 diff 里?
默认 git stash 不含未跟踪文件(需要 git stash -u)。同样,stash show -p 也不会显示它们;加了 -u 存的 stash 才包含。
Q:stash@{0} 的花括号要转义吗?
bash/zsh 中直接写即可;某些 shell(如 tcsh、PowerShell 旧版)需加引号 'stash@{0}'。
Q:stash 会过期吗?
stash 列表通过 refs/stash 的 reflog 管理,过期行为取决于配置,不能据此保证保留天数。长期存放请转成正式分支:git stash branch 名字 stash@{n}。