当你想要保存当前的暂存区和工作区的状态的时候,你可以使用git stash命令。比如:你正在开发一个新功能,写了一些代码(保存暂存的和没有暂存的或没有记录的),现在需要去修复一个紧急bug,你又不想提交,这时你可以选择保存当前工作区和暂存区的内容,需要的时候恢复。
这个命令会保存当前的暂存区和工作区的状态,然后返回到HEAD(git reset —hard HEAD)。最新的stach可以在.git/refs/stash中看到。
git stash save
save [-p|—patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|—all] [-q|—quiet] [message]
[ ]代表这个参数是可选的
-k|--keep-index 表示 stash之后,所有对暂存区的改变会维持不变(比如你之前add 了一个file,提交之后,git status还是能够在暂存区看到你的 add),如果是—no-keep-index的话,stash之后的状态就是git reset —hard HEAD。
-p|—patch 不太了解,只知道用了会开启一个交互式的界面让你选择
-u|--include-untracked 会把没有记录到的文件也保存下来(比如你新建了一个文件,但是还没有git add,stash也会把这个文件保存下来)
-a|—all 会把忽略的文件也保存下来(.gitignore中的)
-q|—quiet 终端不打印输出
message 一个对这个stash的描述,如果执行git stash list,我们能够看到这个描述
git stash list
list [options]
不加options,会列出所有的stash,你也可以指定某个stash(stash@{0}代表最近的stash)
git stash show [stash]
显示和他parent的差异
git stash pop
pop [—index] [-q|—quiet] [stash]
与git stash save执行相反的操作,从stash list中移除这个stash,恢复工作区
—index 如果指定了这个参数,那么不仅恢复工作区,也会恢复暂存区
git stash apply
apply [—index] [-q|—quiet] [stash]
和pop类似,区别在于apply不会吧stash从stash list中移除
git stash branch
branch [branchname] [stash]
以这个stash被创建的那个commit为起点,创建一个叫branchname的分支,然后再在这个分支执行git stash pop —index stash
git stash clear
清空当前所有的stash
git stash create
创建一个stash,并返回他的commit对象,但并不在refs中存储这个对象
git stash store
存储通过create创建的stash。(可以在refs的stash和log/refs下看到这个stash)