git stash
是 Git 的一个实用命令,用于临时保存当前工作目录和暂存区的修改,以便你可以切换到其他分支或任务,稍后再恢复这些更改。以下是关于 git stash
的详细说明和常见用法:
基本用法
-
保存当前修改(不包含未跟踪的文件)
bashgit stash
等价于:
bashgit stash push
-
保存修改并包含未跟踪的文件(untracked files)
bashgit stash -u
或:
bashgit stash --include-untracked
-
保存修改并包含所有文件(包括 ignored 文件)
bashgit stash -a
或:
bashgit stash --all
-
添加说明信息(方便识别)
bashgit stash save "描述信息"
查看存储的 stash 列表
bash
git stash list
输出示例:
stash@{0}: On main: 描述信息
stash@{1}: On feature-branch: WIP
恢复 stash
-
恢复最近一次的 stash 并删除 stash 记录(默认)
bashgit stash pop
-
恢复指定 stash(不删除记录)
bashgit stash apply stash@{n}
例如:
bashgit stash apply stash@{0}
-
恢复 stash 并删除记录
bashgit stash pop stash@{n}
删除 stash
-
删除最近一次的 stash
bashgit stash drop
-
删除指定的 stash
bashgit stash drop stash@{n}
-
清空所有 stash
bashgit stash clear
进阶用法
-
将 stash 应用到其他分支
- 先切换到目标分支,再运行
git stash apply
。
- 先切换到目标分支,再运行
-
从 stash 创建新分支
bashgit stash branch 新分支名 stash@{n}
这会基于 stash 的提交创建一个新分支,并自动删除该 stash。
-
查看 stash 的差异
bashgit stash show -p stash@{n}
常见场景示例
场景 1:临时切换分支
bash
# 当前有未提交的修改
git stash
git checkout 其他分支
# 完成其他任务后切回原分支
git checkout 原分支
git stash pop
场景 2:保存未完成的实验性代码
bash
git stash save "实验性功能A的部分代码"
# 后续恢复
git stash pop
场景 3:误删 stash 后恢复
如果误删了未备份的 stash,可以通过 Git 的引用日志找回:
bash
git fsck --unreachable | grep commit | awk '{print $3}' | xargs git show
# 找到对应的提交后,手动恢复
注意事项
-
冲突处理
如果
pop
或apply
时发生冲突,需手动解决冲突后提交。 -
未跟踪文件
默认不保存未跟踪文件(需加
-u
或-a
参数)。 -
长期存储
Stash 是临时存储,长期未使用的 stash 可能会被垃圾回收(建议提交到分支)。
-
安全性
敏感数据(如密码)不建议存到 stash,可能通过日志泄露。
通过灵活使用 git stash
,你可以高效管理临时修改,避免不必要的提交或丢失工作进度!