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