Menu
CoddyTech

Git Stash

最后更新

git stash 把未提交的改动临时收起来,让工作区恢复到干净的状态,这样你不用提交做了一半的工作,就能切换分支或拉取代码。这些改动会放进一个栈里,之后可以用 git stash pop(应用并删除)或 git stash apply(应用并保留)重新取回。

在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。

git stash 把未提交的改动收进一个栈并清空工作区;之后用 pop 把它们取回来。

语法

命令作用
git stash收起已跟踪文件的改动,清空工作区
git stash -u同时贮藏未跟踪的文件
git stash push -m "msg"贮藏时附上说明信息
git stash push <file>只贮藏指定的文件
git stash list列出所有贮藏
git stash pop重新应用最新的贮藏并删除它
git stash apply重新应用最新的贮藏并保留它
git stash drop删除最新的贮藏
git stash clear删除所有贮藏

pop vs apply

特性git stash popgit stash apply
重新应用改动是是
应用后删除贮藏是否
适合重复使用同一个贮藏否是

git stash 常见问题

git stash 是做什么的?
它把未提交的改动保存到一个栈里,并把工作区重置到最后一次提交,让你从干净的状态开始。你的改动不会丢失,只是被收起来了,之后可以用 git stash pop 或 git stash apply 重新应用。需要切换分支、但还不想提交的时候,它非常好用。
git stash pop 和 git stash apply 有什么区别?
两者都会把最近的贮藏重新应用到工作区。git stash pop 应用之后还会把这条贮藏从栈中删除,而 git stash apply 会把它留在栈里,方便你在别处再次应用。只恢复一次就用 pop,想重复使用就用 apply。
git stash 会包含未跟踪的文件吗?
默认不会,单纯的 git stash 只收起已跟踪(已修改)的文件。加上 -u(git stash -u)会包含未跟踪的文件,加上 -a 还会包含被忽略的文件。不加这些选项时,还没有 git add 过的新文件会留在工作区中。
怎么应用某个指定的贮藏?
运行 git stash list,可以看到它们按 stash@{0}、stash@{1} 这样编号,然后用 git stash apply stash@{1}(或 pop)重新应用其中某一条。每条贮藏还会显示创建时所在的分支和说明信息,方便你区分。
可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行 git stash,无需安装。Coddy 的免费互动 Git 课程也会一步步教你管理进行中的工作。
Coddy 编程语言插图

在 Coddy 学习 Git

开始