`git reset stash` 的语义是什么?

mer*_*011 5 git

今天,我不小心输入了命令git reset stash,它对我最近的历史做了一些非常奇怪的事情。它看起来像最小的,它删除了最近的提交,并添加了另外两个提交,一个用于索引,另一个用于存储本身。

我环顾四周,man git-reset但没有发现那里描述的这种行为。

这个命令的预期语义是什么,它是否记录在某处?

Aas*_*set 4

stash被 git 识别为对包含最新存储的提交的引用 - trygit rev-parse stashcat .git/refs/stash,它将打印提交 SHA。

因此,git reset stash与 any 具有相同的效果git reset <branch/tag/commit>:它将您当前的分支重置为指向您指示的提交,并将原始提交和新提交之间的任何差异保留为待处理的更改。(存储由两个提交组成,正如您所说,其中包含索引和工作目录更改。)

  • 请注意,存储提交(名称“stash”所指的提交)从技术上讲是一种合并提交,因为它有两个父级,但它不像常规合并提交那样工作,并且 Git 的其他部分会奇怪地显示它。将分支名称保留在那里并不是一个好主意。:-) (3认同)
  • 完全没有意识到藏匿的东西也是秘密提交的!今天的额外学习,谢谢! (2认同)