stash
注意
stash堆栈是全局的,切换分支后stash栈内容不会变
保存当前的工作区与暂存区的状态,把当前的修改的保存到git
栈,每次使用都会新加一个stash@{index}
,index是编号
- stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]
语法
- git stash list [<log-options>]
- git stash show [-u | --include-untracked | --only-untracked] [<diff-options>] [<stash>]
- git stash drop [-q | --quiet] [<stash>]
- git stash pop [--index] [-q | --quiet] [<stash>]
- git stash apply [--index] [-q | --quiet] [<stash>]
- git stash branch <branchname> [<stash>]
- git stash [push [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
- [-u | --include-untracked] [-a | --all] [(-m | --message) <message>]
- [--pathspec-from-file=<file> [--pathspec-file-nul]]
- [--] [<pathspec>…]]
- git stash save [-p | --patch] [-S | --staged] [-k | --[no-]keep-index] [-q | --quiet]
- [-u | --include-untracked] [-a | --all] [<message>]
- git stash clear
- git stash create [<message>]
- git stash store [(-m | --message) <message>] [-q | --quiet] <commit>
指令
#list
列出您当前拥有的存储项。每个 stash entry
均以其名称列出(例如 stash@{0}
是最新条目, stash@{1}
是之前的条目,依此类推),创建条目时当前分支的名称以及一个条目所基于的提交的简短描述。
- stash@{0}: WIP on submit: 6ebd0e2... Update git-stash documentation
- stash@{1}: On master: 9cc0589... Add git-stash
#push
将本地修改保存到新的 stash entry
然后将其回滚到HEAD(在工作树和索引中)。<message>
部分是可选的,并提供说明以及隐藏状态。
#save
不推荐使用此选项,而推荐使用 git stash push
。它与’隐藏推送’的不同之处在于它不能采用pathspec。而是将所有非选项参数串联起来构成隐藏消息
#show
将存储条目中记录的更改显示为存储内容和首次创建存储条目时提交的差异。
#drop
从存储列表中删除单个存储状态,并将其应用到当前工作树状态的顶部,即执行 git stash push
的逆操作
。工作目录必须与索引匹配。
应用状态可能会因冲突而失败;在这种情况下,它不会从存储列表中删除。您需要手动解决冲突,然后手动调用 git stash drop
可以将编号index
的缓存释放出来,并从存储列表中删除
- git stash drop stash@{index}
#apply
会将当前分支的最后一次缓存的内容释放出来,但是刚才的记录还存在list中
可以将编号index
的缓存释放出来,但记录还存在list中
- git stash apply stash@{index}
#branch
从最初创建 <stash>
的提交开始创建并签 <branchname>
为<stash>
中的更改应用于新的工作树和索引。如果成功,并且 <stash>
是 stash@{<revision>}
形式的引用,则它将删除 <stash>
。
如果您在其上运行 git stash push
的分支已更改得足够多,以至于 git stash apply
由于冲突而失败,这将很有用。由于存储条目是在运行 git stash
时是HEAD的提交之上应用的,因此它可以恢复原始存储状态,而不会发生冲突。
#create
创建一个stash条目(这是一个常规的提交对象),并返回它的对象名,而不在ref命名空间的任何地方存储它。这对脚本很有用
#store
将通过 git stash create
创建的给定存储存储在存储参考中,以更新存储参考日志。旨在对脚本有用
#clear
删除所有隐藏条目。请注意,这些条目将随后被修剪,并且可能无法恢复
选项
- -a
--all -
此选项仅对
push
和save
命令有效。 -
所有被忽略和未跟踪的文件也会被存放,然后用
git clean
清理。 - -u
--include-untracked
--no-include-untracked -
当与
push
和save
命令一起使用时,所有未跟踪的文件也会被隐藏起来,然后用git clean
清理。 -
与
show
命令一起使用时,将存储条目中未跟踪的文件显示为差异的一部分。 - --only-untracked
-
此选项仅对
show
命令有效。 -
只显示储藏室条目中未被追踪的文件作为差异的一部分。
- --index
-
此选项仅对
pop
和apply
命令有效。 -
试图不仅恢复工作树的变化,而且恢复索引的变化。然而,当你有冲突时,这可能会失败(这些冲突被存储在索引中,因此你不能再按原来的方式应用这些变化)。
- -k
--keep-index
--no-keep-index -
此选项仅对
push
和save
命令有效。 -
所有已经添加到索引中的变化都保持不变。
- -p
--patch -
此选项仅对
push
和save
命令有效。 -
从 HEAD 和要隐藏的工作树之间的差异中交互式地选择大块。存储条目的构造使其索引状态与存储库的索引状态相同,并且其工作树仅包含您以交互方式选择的更改。然后从您的工作树中回滚选定的更改
-
该
--patch
选项意味着--keep-index
。您可以使用--no-keep-index
覆盖它。 - -S
--staged -
此选项仅对
push
和save
命令有效。 -
仅存储当前暂存的更改。这与基本的
git commit
类似,只是状态被提交到 stash 而不是当前分支。 -
--patch
选项优先于这个选项。 - --pathspec-from-file=<file>
-
此选项仅对
push
命令有效。 -
Pathspec在
中而不是命令行args中传递。如果 <file>
恰好-
使用标准输入。Pathspec元素由LF或CR/LF分隔。可以按照配置变量core.quotePath
的说明引用路径规范元素。 - --pathspec-file-nul
-
此选项仅对
push
命令有效。 -
仅对
--pathspec-from-file
有意义。Pathspec元素用NUL字符分隔,所有其他字符按字面意义使用(包括换行符和引号)。 - -q
--quiet -
此选项仅对
apply
,drop
,pop
,push
,save
和store
命令有效。 -
压制反馈信息。
- --
-
此选项仅对
push
命令有效。 -
为了消除歧义,将pathspec和选项分开。
- <pathspec>…
-
此选项仅对
push
命令有效。 -
新的存储条目只记录符合路径规格的文件的修改状态。然后,索引条目和工作树文件也会被回滚到只针对这些文件的 HEAD 状态,而不符合 pathspec 的文件则保持不变。
- <stash>
-
此选项仅对
apply
,branch
,drop
,pop
,show
命令有效。 -
形式为
stash@{<revision>}
引用。如果未给出<stash>
,则采用最新的存储(即stash@{0}
)。