前言写代码时经常遇到这种情况正在改一个功能突然来了紧急 bug 要修想临时切换分支去看别人的代码本地改了一堆文件但还不想提交这时候如果直接git checkout或git pullGit 会报错说你有未提交的修改。Git Stash就是专门解决这个问题的工具——它能把你当前工作区的修改临时“藏”起来让工作区变得干净等你处理完其他事情后再把修改取回来。下面用最通俗的方式讲清楚它的用法并配上可直接复制运行的示例。1. 最常用的基本操作把当前修改藏起来git stash或者带上说明(推荐)git stash save 临时修改登录页面样式还没调完执行后你的工作区和暂存区会变得干净所有未提交的修改都被存到了 stash 里。查看已经藏了哪些东西git stash list输出类似stash{0}: On main: 临时修改登录页面样式还没调完 stash{1}: On main: 紧急修复前的半成品数字越小表示越新。把修改取回来(两种方式)方式一取出并删除这条记录(最常用)git stash pop相当于“取出来 扔掉这条记录”。方式二只取出但保留记录git stash apply适合你想多次应用同一份修改的情况。如果有多条记录可以指定哪一条git stash pop stash{1} git stash apply stash{0}2. 实际工作中的典型场景场景 1紧急修复 bug# 正在开发新功能工作区有一堆未提交修改 git status # 先把修改藏起来 git stash save 新功能开发到一半 # 切换到稳定分支修 bug git checkout main # ... 修 bug、提交 ... # 修完后切回原来的分支 git checkout feature/login # 把之前藏的修改取回来继续干 git stash pop场景 2想临时看一下别的分支代码git stash git checkout other-branch # 随便看看 git checkout - git stash pop场景 3只想藏部分文件(不是全部)# 先把想保留的文件暂存 git add src/login.js # 只把未暂存的修改藏起来 git stash --keep-index或者用交互式选择git stash -p会一个一个问你要不要 stash 这个改动。3. 进阶但很实用的命令命令作用示例git stash show查看某条 stash 改了什么git stash show -p stash{0}git stash drop删除某条记录git stash drop stash{1}git stash clear清空所有 stash(慎用)git stash cleargit stash branch从某条 stash 直接创建新分支git stash branch temp-branch stash{0}git stash -u把未跟踪的新文件也一起藏起来git stash -ugit stash -a连 ignored 文件也一起藏git stash -a特别推荐# 想把未跟踪的新文件也一起藏起来(很常见) git stash -u4. 几个容易踩坑的点stash 默认不包含未跟踪文件新创建的文件如果不git add用普通git stash是藏不了的需要加-u。冲突处理pop或apply时如果和当前代码冲突Git 会提示冲突需要手动解决后才能继续。stash 不是永久备份虽然它存在本地但还是建议重要修改尽早正式提交。git stash clear或重新 clone 都会让它消失。想给 stash 改名Git 本身不支持直接改名但可以用git stash store -m 新的说明 $(git rev-parse stash{0}) git stash drop stash{1} # 把旧的删掉5. 推荐的日常工作流# 1. 开始工作时先看看有没有残留的 stash git stash list # 2. 临时需要切分支或修 bug git stash save 当前工作进度说明 # 3. 处理完其他事后 git stash pop # 4. 如果 pop 产生冲突解决完再提交 git add . git commit -m 继续完成之前的功能总结git stash 把工作区修改临时藏起来git stash list 看看藏了哪些git stash pop 取出来并删除记录(最常用)git stash apply 只取出来保留记录记得加-u才能把新文件一起藏起来掌握这几个命令后你再也不用因为“有未提交修改”而烦恼了。工作区随时可以保持干净需要的时候再把进度拿回来继续。试试看你会发现它是 Git 里最实用的命令之一。