摘要代码写到一半突然要切换分支修bug——你是直接 commit 一个临时保存还是眼睁睁看着未提交的代码消失如果你还不会用git stash这篇文章能帮你省掉 80% 的代码找回麻烦。学完本文你能做到随时暂存当前工作区干净切换分支在多个暂存记录间自由切换解决 stash 冲突、恢复误删的 stash配合 EasyClaw 等AI 工具让 Git 操作不再靠死记硬背前置条件安装了 Git任意版本有基础的 commit/branch操作经验即可。如果不想自己全程手动保存可以用Easyclaw去进行操作后附EasyClaw教程。Easyclaw自动保存和查询命令工具一、git stash 是什么为什么需要它git stash暂存/藏匿是 Git 提供的一个临时抽屉机制。它能把你当前未提交的修改包括工作区和暂存区打包压入栈让工作区恢复到上次提交时的干净状态之后随时可以取回。典型使用场景场景不用 stash用 stash切分支修紧急 bug被迫提交半成品 commitstash 暂存切分支改完再恢复拉取远程更新pull 报冲突无法执行stash → pull → stash pop尝试新思路手动备份文件stash 保存现场随时可回退多任务并行开多个工作目录用 stash list 管理多份暂存一句话总结git stash 是 commit 的轻量替代专门处理不该提交但不能丢的代码。二、工具准备操作系统自带的 Git 命令行就够用但如果你想让 Git 命令不再靠查文档记忆推荐提前装好 AI辅助工具。没有 EasyClaw 时每次想不起来git stash pop和git stash apply的区别就得打开浏览器搜翻到答案再回来前后起码 5 分钟一天下来能被打断十几次。有了 EasyClaw 之后在桌面端直接问git stash pop 和 apply 有什么区别3秒出答案点击左下角小星星收藏常用 Git 命令下次直接调用完全不用离开工作界面。安装后在技能商店搜索Git 助手技能包开箱即用不需要配置任何环境变量。三、核心步骤git stash 完整操作流程步骤一暂存当前修改最基础的用法gitstash执行后Git 会把所有已追踪文件的修改压栈工作区恢复干净。如果你想给这次暂存加一个备注强烈推荐否则以后 stash list 里一堆WIP on main完全分不清gitstash push-mfeat: 用户登录模块写到一半如果还有新建但未 git add的文件untracked files也要一起暂存gitstash push --include-untracked-m含新文件的暂存# 简写gitstash-u-m含新文件的暂存场景对话同事你的登录功能写好了吗线上有个支付bug 要你帮忙看一下。你稍等我先把手头的代码存一下。gitstash push-mlogin: 表单验证写到一半gitcheckout hotfix/payment-bug同事这么快你git stash存起来了改完支付 bug 再切回来取。步骤二查看暂存列表gitstash list输出示例stash{0}: On main: login: 表单验证写到一半 stash{1}: On feature/search: 搜索功能临时保存 stash{2}: WIP on main: abc1234 fix typostash{0}是最新的一条stash{n}的数字越大越旧。查看某条 stash 具体改了什么gitstash show stash{1}# 简要diff文件列表gitstash show-pstash{1}# 详细 diff逐行变更步骤三恢复暂存方式一pop取出并删除gitstash pop# 取出最新一条 stash{0}gitstash pop stash{2}# 取出指定位置pop取出 从列表删除适合一次性恢复不想留存记录。方式二apply取出但保留gitstash apply# 取出最新但stash 列表里还在gitstash apply stash{1}# 取出指定位置保留记录apply适合需要把同一份暂存应用到多个分支的情况。命令恢复代码保留 stash 记录适用场景stash pop✅❌一次性恢复不需要复用stash apply✅✅多分支复用同一份暂存步骤四删除暂存记录gitstash drop stash{0}# 删除指定一条gitstashclear# 清空全部 stash谨慎注意stash clear不可撤销清空前先用git stash list确认一下。步骤五从stash 创建新分支这是一个很实用但容易被忽略的功能。当你暂存的代码量比较大直接pop可能产生冲突可以先开一个新分支来接收gitstash branch new-feature stash{0}这条命令会基于 stash 创建时的 commit切出new-feature分支自动 apply 该stash从列表中删除该 stash四、处理 stash 冲突stash pop/apply 时如果当前分支也改了同一行代码会产生冲突CONFLICT (content): Merge conflict in src/login.js The stash entry is kept in case you need it again.解决步骤# 1. 打开冲突文件手动解决 标记# 2. 标记为已解决gitaddsrc/login.js# 3. 如果是 pop 触发的冲突stash 记录不会自动删除手动清理gitstash drop stash{0}五、进阶技巧只暂存部分文件gitstash push src/login.js src/utils.js-m只存这两个文件只暂存工作区不暂存已git add 的内容gitstash push --keep-index-m保留staged 内容暂存时包含被忽略的文件.gitignore 内gitstash push--all-m含ignored 文件六、常见问题 QAQgit stash 之后切了分支回来发现 stash 不见了Astash 是全局的不属于某个分支git stash list在任何分支都能看到。不见了通常是因为用了pop恢复后自动删除了或者用了clear。Qstash pop 之后代码出现冲突怎么取消恢复A解决冲突后继续推进即可如果想完全撤销用git checkout -- .放弃工作区改动前提是 stash 记录还在。Qstash 里的内容会丢失吗A只要没有执行drop/clearstash 会一直保留在本地.git目录里不会因切换分支或重启消失。但git gc垃圾回收可能会清理悬空对象建议重要的暂存尽快 pop或转为正式commit。Qpop 和 apply 都失败了报no changes是什么原因A可能是 stash 内容和当前工作区完全一致Git 认为无需 apply。用git stash show -p stash{0}确认内容后再检查当前工作区状态。Q在 Windows 上用 git stash push -m “备注” 报编码错误A在 CMD 里把备注改为英文或者用 Git Bash 执行Git Bash 对 UTF-8 支持更好。七、总结日常切换分支前先git stash push -m 描述保存现场切回来再git stash pop。stash pop 和 apply 的核心区别pop 用完即删apply 保留记录可复用。新建未追踪文件记得加-u参数否则这些文件不会被暂存。stash 产生冲突时不要慌手动解决冲突文件后git add再手动drop记录。stash list 里超过 5 条就该清理了养成加备注的习惯避免误删重要暂存。如果你觉得 Git 命令还是太多记不住立刻免费体验 EasyClaw——在桌面端直接用自然语言问Git 操作比翻文档快 10 倍再也不用为忘命令而中断思路。Easyclaw官网https://easyclaw.cn/?f460Easyclaw使用教程安装技能包如何使用技能输入你想查询的指令结果记住AI只是辅助工具有时也会犯错它只能提供参考要仔细观察避免错误