Git Stash
最后更新
git stash 把未提交的改动临时收起来,让工作区恢复到干净的状态,这样你不用提交做了一半的工作,就能切换分支或拉取代码。这些改动会放进一个栈里,之后可以用 git stash pop(应用并删除)或 git stash apply(应用并保留)重新取回。
在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。
语法
| 命令 | 作用 |
|---|---|
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 pop | git 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 课程也会一步步教你管理进行中的工作。