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 stash
和 git cherry-pick
.
使用不同的实现是没有意义的
我已经更改了我的工作目录,然后 运行 git stash
。在我的 .dir/refs
目录中,我有一个名为 stash
的新引用,它是指向具有散列 2d05be16dcd0828c84d63f1e07ee78a2a28b3deb
的对象的指针。我检查了对象的类型,它是 commit
:
$ git cat-file -t 2d05be16dcd0828c84d63f1e07ee78a2a28b3deb
commit
所以看起来存储确实创建了一个提交。那么当我取下它时,是否等同于挑选它?
不完全是,但很相似。应用隐藏的更改会修改索引 and/or 工作树,但永远不会创建新的提交。成功挑选后,索引和工作树将完全相同,并且将创建一个新的提交。
也就是说,应用更改的方式几乎相同。 Git 需要一些方法将特定提交的更改应用到任意树,并且对 git stash
和 git cherry-pick
.