隐藏条目如何成为HEAD提交和索引提交的子提交?

时间:2019-01-23 01:09:52

标签: git

Manpage of git stash

  

隐藏项表示为一个提交,其树记录了状态   目录的第一个父目录是在HEAD的提交   创建条目的时间。第二个父级的树记录了   进行输入并成为其子项时索引的状态   HEAD提交。血统图看起来像这样:

       .----W
      /    /
-----H----I
     

其中H是HEAD提交,I是记录状态的提交   索引,W是记录工作状态的提交   树。

在示例中,隐藏条目是否由提交W表示?

隐藏项的提交W有两个父母IH是什么意思?

W是(双向或三向)合并两个提交IH的结果吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

在示例中,隐藏条目由提交W表示吗?

是-或更正确地说,不是,它由提交W 提交I表示,但是W足以找到 IW I中的任何一个都足以找到H,而git stash会自动找到所有三个提交。

  

隐藏项的提交W有两个父母IH是什么意思?

没什么特别的。对于git stash apply和其他git stash函数来说,找到IH都更容易(非常容易)。

文档中未显示的是隐藏的 third 提交。第三次提交是可选的;仅当您使用-a / --all-u / --include-untracked时才显示。第三次提交是W的第三个父提交。存储代码将测试是否存在该第三父代,以确定该存储是两次提交存储还是三次提交存储。

(第三个提交(如果存在的话)具有根提交的形式,因为它没有父级。它的独特之处在于它只保存并仅保留未跟踪的文件,并且根据所使用的标志也可能被忽略,而根本不保留任何工作树文件。我通常将第三次提交称为U。)

  

W是(双向或三向)合并两个提交IH的结果吗?

不。隐藏代码仅使用(滥用?)合并提交使用的 form ,但出于不同的目的:将两个或有时三个提交提交为易于检查的隐藏形式要检查的代码。这样,特殊名称refs/stash可以保存W提交的哈希ID,其他提交也位于该哈希ID中。

git stash代码使用特殊的临时索引文件来提交WU提交。进行I提交更容易:它只运行{{ 1}}和git write-tree。)