一文详解Git的暂存与stash功能
基础暂存操作
添加修改到暂存区
通过git add命令将工作目录的修改标记为“准备提交”:
# 添加单个文件 git add file.txt # 添加所有修改的文件(不包括未跟踪的文件) git add . # 添加特定类型的文件(如所有.js文件) git add *.js
功能:将修改存入暂存区,但不会立即创建提交记录。 注意:未跟踪的文件需先用git add添加才能暂存。
取消暂存
误将文件添加到暂存区时,可通过以下命令撤销:
# 取消单个文件的暂存 git restore --staged file.txt # 取消所有文件的暂存 git restore --staged .
功能:将文件从暂存区移回工作目录,保留修改内容。
一、Git Stash 是什么?核心作用
git stash (中文常翻译为储藏 / 暂存 / 暂存搁置) 是 Git 中极其常用的命令,核心核心作用:
临时「储藏 / 保存」工作区 + 暂存区 中所有未提交的修改内容,让你的工作区和暂存区立刻恢复到「干净状态」(和最近一次 commit 完全一致) ,且不会丢弃任何修改。
什么时候必须用 Git Stash?(核心使用场景)
这是使用 git stash 的黄金场景,遇到以下情况无脑用即可,也是工作中 99% 的使用场景:
- 正在当前分支开发新功能 / 改 Bug,突然需要切换到其他分支(比如
test/release)处理紧急问题; - 当前分支的代码改了一半、还没写完、无法提交(提交不完整的代码会污染分支提交记录);
- 切换分支前,Git 强制要求「工作区干净」,否则会提示冲突或无法切换。
简单说:想切分支、代码没写完、不想提交 → 用 git stash 就对了!
二、Git Stash 基础核心命令(必会,高频使用)
所有命令按「使用频率从高到低」排序,优先掌握前 5 个即可满足 90% 的开发需求,推荐死记硬背 + 熟练使用。
1. 核心存储:git stash / git stash push
# 方式1:最简写法(推荐,工作中99%用这个) git stash # 方式2:保存修改并添加描述信息 git stash save "描述信息" # 方式3:完整写法(和上面等价,push 可以省略) git stash push
功能:把「工作区 + 暂存区」的所有未提交修改,临时保存到 Git 的「储藏栈」,工作区立刻变干净,所有修改被隐藏。
2. 带备注存储:git stash push -m "备注信息" 【强烈推荐】
git stash push -m "首页轮播图样式修改-未完成" git stash push -m "订单模块bug修复-待测试"
功能:和 git stash 功能一致,唯一区别是给本次储藏添加「自定义备注」。
为什么强烈推荐?当你多次 git stash 后,会有多个储藏记录,带备注能一眼区分每个储藏对应的修改内容,不会混淆,避免后续恢复错代码!
3. 查看所有储藏记录:git stash list
git stash list
功能:查看 Git 储藏栈中所有的临时存储记录,输出格式如下:
stash@{0}: On dev: 搜索框样式优化-未完成
stash@{1}: On dev: 筛选条单选失效问题修复-待测试
- 储藏栈是「后进先出」的结构(栈结构):最新的储藏记录排在最上面,编号
stash@{0}; - 每个记录包含:编号、所属分支、自定义备注。
4. 恢复储藏的修改:git stash pop 【最常用恢复方式】
# 恢复「最新的储藏记录」(stash@{0}),恢复后自动删除这条储藏记录
git stash pop
# 恢复「指定编号」的储藏记录,恢复后自动删除该记录
git stash pop stash@{1}
- 核心功能:将储藏的修改恢复到当前工作区,恢复后代码和你 stash 之前完全一致(工作区 + 暂存区的修改都回来)。
- 关键特性:
pop= 「恢复 + 删除」,恢复后这条储藏记录就从栈中消失了,适合确认只恢复一次的场景。
5. 恢复储藏的修改:git stash apply 【备选恢复方式】
# 恢复最新的储藏记录(stash@{0}),恢复后「不删除」这条储藏记录
git stash apply
# 恢复指定编号的储藏记录,恢复后「不删除」该记录
git stash apply stash@{1}
- 核心功能:和
git stash pop几乎一样,都是把储藏的修改恢复到工作区。 - 关键区别:
apply= 「只恢复,不删除」,恢复后这条储藏记录依然保存在栈中,适合需要多次恢复同一份修改的场景。
✅ 重点区分:git stash pop vs git stash apply(必考必用)
这两个命令是最容易混淆的,记住核心差异只有一个:是否删除储藏记录
✅ git stash pop:恢复 + 删除记录 → 「一次性恢复」,用完即删,推荐日常使用;
✅ git stash apply:只恢复,不删记录 → 「可重复恢复」,恢复后还能再次恢复这份修改,适合特殊场景。
三、Git Stash 进阶命令(必会,解决 80% 的问题)
1. 删除指定储藏记录:git stash pop储藏编号
# 删除最新的储藏记录
git stash drop stash@{0}
# 删除指定编号的储藏记录
git stash drop stash@{2}
功能:只删除,不恢复。当你有一些无用的储藏记录,不想恢复只想清理时,用这个命令。
2. 删除所有储藏记录:git stash clear
git stash clear
功能:清空 Git 储藏栈中的所有储藏记录,慎用执行后无法恢复被删除的记录,适合确认所有储藏都无用时的批量清理。
3. 查看储藏的「具体修改内容」:git stash show
# 查看最新储藏的「文件变更列表」(只显示文件名+增删行数)
git stash show
# 查看最新储藏的「完整diff详情」(显示具体修改的代码行,推荐)
git stash show -p
# 查看指定编号储藏的完整diff详情
git stash show -p stash@{1}
功能:在恢复储藏前,想先看看这份储藏里具体改了哪些代码,避免恢复错内容时,用这个命令,-p 参数是核心(patch 补丁模式),能看到完整的代码修改。
1. 储藏「未追踪的新文件」:git stash -u / git stash --include-untracked
git stash -u # 等价写法 git stash --include-untracked
重要特性补充:默认的 git stash 只会储藏「已追踪的文件」(已经被 Git 管理的文件,比如之前 commit 过的文件),对于工作区中新建的、从未被 git add 过的新文件(未追踪文件) ,默认不会被储藏。
加 -u 参数后:会把「已追踪文件的修改 + 未追踪的新文件」一起储藏,工作区彻底干净,连新文件都被隐藏了。
5. 储藏「忽略的文件」:git stash -a / git stash --all
git stash -a # 等价写法 git stash --all
功能:最强的储藏命令,会储藏「已追踪文件修改 + 未追踪新文件 + .gitignore 中忽略的文件」(比如 node_modules、dist 等),适合需要完全清空工作区的场景,日常开发很少用,特殊场景(比如切换分支前彻底清理)可用。
四、Git Stash 避坑指南 & 核心注意事项(重中之重,必看!)
这部分是最容易踩坑的地方,很多人用 stash 出问题,都是因为没注意这些规则,全部记住,能避开 99% 的坑!
✅ 注意 1:git stash 不会储藏的内容(默认行为)
默认执行 git stash 时,以下内容绝对不会被储藏,会原封不动留在工作区:
- 从未被 Git 追踪过的文件(新建的、没执行过
git add的文件); - 被
.gitignore忽略的文件(比如依赖包、打包产物、日志文件); - 已经提交到版本库的文件(只会处理「未提交」的修改)。
✅ 解决办法:需要储藏未追踪文件用 git stash -u,需要储藏忽略文件用 git stash -a。
✅ 注意 2:stash 的恢复与「分支无关」,但有最佳实践
很多人误以为「在哪个分支 stash,就只能在哪个分支恢复」,这个认知是错误的!
真相:Git 的 stash 是「全局的」,储藏的是「文件的修改内容」,不是和分支绑定的,你可以在 dev 分支 stash,然后切换到 test 分支恢复。
最佳实践:尽量在哪个分支储藏,就在哪个分支恢复!
原因:不同分支的代码差异可能很大,跨分支恢复 stash 大概率会触发「代码冲突」,处理冲突会增加不必要的麻烦,除非你明确知道两份代码无冲突。
✅ 注意 3:储藏记录的「生命周期」
储藏记录不是永久保存的,它是「临时缓存」,以下操作会删除储藏记录:
- 执行
git stash pop 编号:恢复后自动删除该记录; - 执行
git stash drop 编号:手动删除该记录; - 执行
git stash clear:删除所有记录; - 仓库被删除 / 迁移:储藏记录会跟着仓库消失(不会同步到远程仓库)。
✅ 注意 4:stash 无法储藏「空文件 / 空目录」
如果你的修改只是新建了一个空文件 / 空目录,执行 git stash 不会生效,Git 会提示「No local changes to save」,这是 Git 的默认规则,无需处理。
✅ 五、Git Stash 完整工作流程演示(工作中最常用,直接套用)
给你一套完整的「标准流程」,遇到「代码没写完要切分支」的场景,直接按步骤执行即可,零错误、零踩坑,这是工作中最经典的用法:
场景:在 dev 分支开发新功能,写到一半,需要切换到 test 分支修紧急 Bug
# 步骤1:当前在 dev 分支,代码没写完,带备注储藏所有修改(推荐带-m) git stash push -m "dev-个人中心模块开发-未完成" # 步骤2:查看储藏记录,确认储藏成功(可选,养成好习惯) git stash list # 步骤3:切换到目标分支(此时工作区干净,切换无任何问题) git checkout test # 步骤4:在 test 分支修复 Bug,完成后正常提交 git add . git commit -m "test-修复订单支付失败bug" # 步骤5:切回原分支 dev git checkout dev # 步骤6:恢复之前储藏的未完成代码(推荐用pop,恢复后删除记录) git stash pop # 步骤7:继续开发未完成的功能即可,代码和之前完全一致 ✔️
核心知识点速记
核心概念
- git stash:临时保存未提交修改,让工作区变干净,核心场景「代码没写完要切分支」;
- stash 是「栈结构」,后进先出,最新的记录是 stash@{0}。
必会核心命令(按优先级排序)
- 储藏:
git stash push -m "备注"(带备注,推荐首选) - 查看:
git stash list - 恢复:
git stash pop(恢复 + 删除,日常首选) /git stash apply(恢复不删除,备选) - 删除:
git stash drop 编号(删指定) /git stash clear(删全部) - 查看修改:
git stash show -p
两大避坑重点
- 默认不储藏「未追踪文件」和「忽略文件」,需要则加
-u/-a; - 尽量「同分支储藏、同分支恢复」,避免跨分支冲突。
核心区别速记
git stash pop → 恢复 + 删记录;git stash apply → 恢复不删记录。
小剧场分享几个好看的MD主题
- qklhk-chocolate
- scrolls-light
- Chinese-red
- nico
- devui-blue
- z-blue
- yu
以上就是一文详解Git的暂存与stash功能的详细内容,更多关于Git暂存与stash操作的资料请关注脚本之家其它相关文章!
相关文章
计算机出现502Bad Gateway错误完全解决指南(不懂代码也不用懂服务器)
502 Bad Gateway是一种HTTP协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器中接收到的响应是无效的,这篇文章主要介绍了计算机出现502Bad Gateway错误完全解决指南的相关资料,需要的朋友可以参考下2026-01-01


最新评论