前言
写代码时经常遇到这种情况:
- 正在改一个功能,突然来了紧急 bug 要修
- 想临时切换分支去看别人的代码
- 本地改了一堆文件,但还不想提交
这时候如果直接git checkout或git pull,Git 会报错,说你有未提交的修改。
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 clear |
git stash branch | 从某条 stash 直接创建新分支 | git stash branch temp-branch stash@{0} |
git stash -u | 把未跟踪的新文件也一起藏起来 | git stash -u |
git 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 里最实用的命令之一。