Git 暂存基础操作
添加修改到暂存区
将修改后的文件加入暂存区,仅需一行 git add 命令。这一操作相当于告知 Git:“这些改动我准备保留在下一次提交中。”

# 添加单个文件 git add file.txt # 添加所有修改的文件(不包括未跟踪的文件) git add . # 添加特定类型的文件(如所有.js文件) git add *.js
功能:将修改内容存入暂存区,但不会立刻生成提交记录。 注意:未跟踪的新文件需先通过 git add 添加才能被暂存。
取消暂存
如果不小心把文件加入暂存区,可以使用 git restore --staged 轻松撤销:
# 取消单个文件的暂存 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:完整写法(与方式1等价,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 drop 编号
# 删除最新的储藏记录
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 补丁模式),可看到完整的代码修改。
4. 储藏「未追踪的新文件」: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 → 恢复不删记录。
