git stash pop 与 git stash apply 的区别

两者都把 stash 的改动恢复到工作区,区别是:pop 应用成功后删除该 stash 条目,apply 保留条目。想重复应用同一 stash(比如到多个分支)用 apply;一次性恢复用 pop 更干净。

最佳实践
Git 提交历史与版本恢复示意

功能上都是"把 stash 的改动应用回工作区",唯一区别:成功后 pop 会把这条 stash 从列表里删除,apply 会保留。 所以 pop ≈ apply + drop。需要把同一份改动应用到多个分支时必须用 apply。

对照

git stash pop               # = apply stash@{0} + 删除该条目
git stash apply             # 应用 stash@{0},条目保留
git stash apply stash@{2}   # 应用指定条目,保留
git stash drop stash@{2}    # 只删除不应用
pop apply
应用改动 ✅ ✅
删除条目 ✅(成功后) ❌
冲突时 条目保留不删(安全) 条目保留

为什么冲突时 pop 不删条目

pop 遇到合并冲突会应用失败(工作区留下冲突标记),此时不会删除 stash 条目——改动还有一份备份。解决完冲突、确认无误后自己 git stash drop。

常见用法

# 同一份改动要铺到多个分支
git checkout branch-a && git stash apply stash@{0}
git checkout branch-b && git stash apply stash@{0}
git stash drop stash@{0}          # 最后手动清理

常见问题(FAQ)

Q:apply 之后改动进了暂存区还是工作区?

默认全部进工作区(未暂存状态)。想恢复 stash 时的暂存/工作区分离状态,加 --index。

Q:pop 错分支了怎么办?

改动已经在工作区,直接 git stash 存回去,切到正确分支再 pop。

Q:stash 列表越来越乱怎么清理?

git stash list 检查,git stash drop stash@{n} 逐条删,或 git stash clear 清空全部(不可恢复,慎用)。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台