Git 的存储机制本质上是创建提交然后挑选它吗?

Is Git's stashing mechanism essentially creating commit and then cherry-picking it?

我已经更改了我的工作目录,然后 运行 git stash。在我的 .dir/refs 目录中,我有一个名为 stash 的新引用,它是指向具有散列 2d05be16dcd0828c84d63f1e07ee78a2a28b3deb 的对象的指针。我检查了对象的类型,它是 commit:

$ git cat-file -t 2d05be16dcd0828c84d63f1e07ee78a2a28b3deb
commit

所以看起来存储确实创建了一个提交。那么当我取下它时,是否等同于挑选它?

不完全是,但很相似。应用隐藏的更改会修改索引 and/or 工作树,但永远不会创建新的提交。成功挑选后,索引和工作树将完全相同,并且将创建一个新的提交。

也就是说,应用更改的方式几乎相同。 Git 需要一些方法将特定提交的更改应用到任意树,并且对 git stashgit cherry-pick.

使用不同的实现是没有意义的