1. 使用场景
有时你想切换分支,但当前这个分支还没完成,你不想把半成品提交,就可以用stash,可以在不提交当前分支的情况下切换分支
2. stash会缓存哪些?
默认情况下, git stash 会缓存下列状态的文件:
-
添加到暂存区的修改(staged changes)
git add过了,还没有commit
-
Git跟踪的但并未添加到暂存区的修改(unstaged changes)
在工作区修改了文件,但还没有用git add
加入到暂存区 但以下状态的文件不会缓存:
-
在工作目录中新的文件(untracked files)
新文件 git add 后,就变为了tracked
-
被忽略的文件(ignored files)
3. 如何使用?
-
git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来
在给出的输出中,工作是用git stash命令保存的。我们可以检查版本库的状态。
正如你所看到的,我的工作只是藏在当前位置。现在,目录已经清理完毕。
-
git stash save ""
保存stash并添加描述信息。类似于
git commit -m "描述信息"
-
git stash list
显示所有 stash 的列表
-
git stash pop
从栈中读取最近一次保存的内容,也就是栈顶的
stash
会恢复到工作区。该命令会将内容从堆栈中删除可以通过
git stash pop
+stash@{1}
执行恢复哪个stash
恢复到当前目录 -
git stash apply
将堆栈中的内容应用到当前目录,不同于
git stash pop
,该命令不会将内容从堆栈中删除 同样可以通过git stash apply
+stash@{1/2/3...}
执行恢复哪个stash
恢复到当前目录 -
git stash show
显示被藏匿的文件和对它们所做的修改。
-
git stash drop
从堆栈中移除某个指定的stash
-
git stash clear
一次性删除所有可用的储藏库。
4.总结
主要命令有:
- git stash 和 git stash save 保存
- git stash list 和 git stash show 显示(一个是以列表显示所有的,一个是显示单个stash的修改)
- git stash pop 和 git stash apply 应用到工作区(前者会删后者不会)
- git stash drop 和 git stash clear 移除(前者删除指定的stash,后者删除所有的)
参考文献