转自:豆包AI
git stash 是 Git 提供的一个强大工具,用于临时保存未提交的修改,让你能够在不提交当前工作的情况下切换分支、处理紧急任务或清理工作目录。其核心作用和常见场景如下:
将当前工作目录和暂存区(add 后的文件)的修改保存到一个栈结构中,使工作目录恢复到最后一次提交时的状态。例如:
从栈中取出最近一次保存的修改并应用到当前分支:
当你在某个分支上工作到一半,需要紧急切换到其他分支处理问题时:
暂时移除未完成的修改,使工作目录干净(例如执行 git bisect 或 git rebase 前):
在不提交的情况下尝试一些临时修改,验证想法后决定是否保留:
| 命令 | 作用 |
git stash |
保存当前工作目录和暂存区的修改(不包括未跟踪文件)。 |
git stash -u |
包含未跟踪文件(-u 或 --include-untracked)。 |
git stash -a |
包含所有文件(-a 或 --all,包括被 .gitignore 忽略的文件)。 |
git stash list |
查看 stash 列表(例如:stash@{0})。 |
git stash pop |
恢复并删除最近的 stash。 |
git stash apply |
恢复但不删除 stash(可指定 stash@{n})。 |
git stash drop |
删除指定的 stash(默认删除最近的)。 |
git stash clear |
删除所有 stash。 |
git stash branch |
创建新分支并直接应用 stash,然后删除该 stash。 |
- 冲突处理:如果恢复 stash 时与当前分支有冲突,需要手动解决冲突。
- 分支关联性:stash 是全局的,不绑定特定分支,可以在任意分支恢复。
- 持久化:stash 存储在本地仓库中,不会随
git push 上传到远程。
- 命名管理:使用
git stash save "描述信息" 为 stash 添加注释,方便识别。
只保存部分修改的文件:
git stash push -m "保存部分文件" 文件1 文件2
git checkout 目标分支
git stash apply stash@{0}
git stash 是 Git 中最实用的工具之一,适合以下场景:
- 临时保存未完成的工作,避免提交不完整的代码。
- 快速清理工作目录,处理紧急任务。
- 实验性修改的验证与管理。
合理使用 git stash 可以显著提高开发效率,减少因频繁提交或切换分支带来的困扰。