git stash 是 Git 中非常实用的命令,用于临时保存当前工作目录中未提交的更改(包括已暂存和未暂存的修改),以便将工作区恢复到干净的状态。这在需要紧急切换分支修复 Bug,但又不想提交未完成的功能时特别有用。
以下是 git stash 相关的核心命令及用法总结:
1. 保存更改 (Save / Push)
- 基本保存:保存当前工作区和暂存区的修改,并清理工作区。
git stash# 或git stash push
- 带描述信息保存:为保存的更改添加备注,方便后续查找。
git stash push -m "描述你的更改"
- 包含未追踪的文件:默认
stash不会保存新建但未追踪的文件,加上-u可以一并保存。git stash -u# 或git stash push -u
- 包含所有文件(含忽略文件):保存所有修改,包括被
.gitignore忽略的文件。git stash -a# 或git stash push -a
- 保留暂存区修改:保存工作区修改,但保留暂存区(已
git add的内容)不动。git stash -k# 或git stash push -k
- 仅保存已暂存的修改:只保存执行过
git add的内容,未暂存的保留在工作区。git stash push -S
- 交互式保存:手动选择哪些代码块(hunk)需要被 stash。
git stash -p
2. 查看更改 (List / Show)
- 列出所有 stash 记录:查看保存的 stash 列表,最新的在最上面(如
stash@{0})。git stash list
- 查看 stash 的修改摘要:查看某个 stash 修改了哪些文件及行数。
git stash show# 或指定某条记录git stash show stash@{1}
- 查看 stash 的具体代码差异:以补丁(patch)形式查看完整的代码改动。
git stash show -p stash@{0}
3. 恢复更改 (Apply / Pop)
- 恢复并删除记录:应用最近一次(或指定)的 stash,并从 stash 列表中删除该记录。
git stash pop# 或指定某条记录git stash pop stash@{1}
- 仅恢复但保留记录:应用 stash 的修改,但不从列表中删除(适合需要多次应用同一份代码的情况)。
git stash apply# 或指定某条记录git stash apply stash@{1}
- 恢复并保留暂存状态:默认恢复后代码都在工作区,加上
--index可以让之前已暂存的代码恢复后依然处于暂存状态。git stash apply --index
4. 删除更改 (Drop / Clear)
- 删除某一条 stash:
git stash drop stash@{0}
- 清空所有 stash 记录:
git stash clear
5. 高级用法:基于 stash 创建新分支
如果你 stash 了一段代码,过了很久才想起来,担心直接 pop 会产生严重的合并冲突,可以基于该 stash 创建一个新分支来测试:
git stash branch <新分支名> stash@{0}
执行后,Git 会检出 stash 创建时的提交,创建一个新分支,应用该 stash,并在成功后自动删除该 stash 记录。
💡 常见工作流示例:
git stash push -m "开发中的登录功能"(保存当前进度)git checkout bugfix-branch(切换到紧急修复分支)- …修复并提交…
git checkout feature-branch(切回原分支)git stash pop(恢复之前的进度继续开发)
如果要放弃本地的修改:
git reset --hardgit pull origin 分支名</pre>
