我需要在我的脚本中知道给定的提交是标准提交还是存储条目。 该方法也应该适用于尚未垃圾收集的已删除存储,因此它不能依赖于检查现有存储条目的 sha(如
git rev-parse stash@{X}
)。
一个隐藏提交有 2 个父项。说
parent1
和parent2
。 parent1
也是 parent2
的唯一父级。图表是这样的
* 9129d71 WIP on master: d2b25fd hello world
|\
| * f38c1f8 index on master: d2b25fd hello world
|/
* d2b25fd hello world
它们的提交消息符合一定的模式。存储条目的消息以
WIP on $branch:
(由 git stash
)或 On $branch:
(由 git stash push -m $msg
)开头,后跟简短的 sha1sum 和 parent1
的主题。 parent2
的消息以index on $branch:
开头,后面是简短的sha1sum和parent1
的主题。
我们可以在普通分支上使用相同的图和消息伪造 3 次提交,并且头部也可以被
git stash apply $commit
消耗。但在真实的日志中并不常见。因此,如果 3 个提交与图表匹配并且它们的提交消息与这些模式匹配。 3 的头部可以被视为一个隐藏条目。