首页/开发/Git 与协作速查/git stash pop 与 apply 的区别
Git 基础与命令88 条

git stash pop 与 apply 的区别

取回现场:pop 恢复后把记录从栈中删除,apply 恢复但保留副本;list/show 查看,drop/clear 删除记录。

Git 与协作速查开发更新于 2026-10-13

pop 与 apply 的区别是什么

两者都把 stash 记录里的改动恢复到当前工作区,区别在恢复之后怎么处理那条记录:pop 恢复并把它从栈里删除,apply 恢复但保留副本。可以这样记:pop 相当于取出即销毁,apply 相当于复制一份留在栈里。

什么时候用哪个

确认这条现场就是自己要的、之后不再需要时用 pop,栈不会越积越乱;只是想试试看、不确定这个版本是否合适时用 apply,不满意可以直接丢弃工作区改动,栈里的记录仍然完好。链式操作多、记录容易混淆的仓库里,apply 更安全一些。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
pop恢复改动并把记录从栈中删除
apply恢复改动但保留栈中记录
指定记录git stash apply stash@{2}
查看list 列出全部;show -p 看内容
清理drop 删单条;clear 清空全部

典型使用场景

  • 取回现场:把之前保存的改动恢复出来继续开发
  • 试跑方案:用 apply 在多个分支上试同一份改动
  • 逐条取回:按编号恢复较早的记录,而不用最新那条
  • 冲突排查:恢复后发现冲突,可以放弃工作区改动再换方式
  • 栈维护:取回后及时 drop,避免记录长期堆积

常用示例

常用示例
git stash list                # 查看栈里的记录与编号
git stash pop                 # 取回最新一条并从栈中删除
git stash apply stash@{2}     # 取回指定记录但保留它
git stash show -p stash@{2}   # 先看内容再决定怎么取
git stash drop stash@{0}      # 删除某条记录
git stash clear               # 清空整个栈

两个命令的差别

对比项popapply
恢复改动是是
是否删除记录删除保留
适用心态确定要这条先试试看
冲突时行为记录同样保留记录保留
pop 遇到冲突时不会删除记录,这是为了避免现场丢失。解决冲突并 git add 之后,再手动 drop 掉那条已经用过的记录即可。
clear 会一次清空栈内全部记录,执行前先用 list 与 show 逐条确认,没有需要保留的现场再清理。
指定记录时用 stash@{编号},编号越小越新。取比较早的记录前先用 show -p 看一眼内容,避免恢复出一份早已忘记的旧现场。

易错点

  • pop 遇到冲突时不会删除记录(避免现场丢失),解决冲突后要手动 drop
  • apply 之后忘记 drop 会让同一条记录反复出现,养成用一条取一条的习惯
  • 在不看内容的情况下 pop 栈顶记录,可能把无关的现场混进当前分支
  • clear 会清空全部记录且没有二次确认,执行前先 list 与 show 确认

数据来源与参考

  • Git 官方文档:git-stash(pop/apply/drop/clear)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌