Git中的commit ish和tree ish是什么? 问题

Git中的commit ish和tree ish是什么? 问题,git,Git,Git中提交ish和树ish的具体示例是什么 堆栈溢出问题涉及 特别是tree-ish,但我想更多地了解这两个方面 背景 文献中的用法 多次提及“提交”和 “像树一样”。例如,如果您正在检查: $git grep--具有匹配项的文件--扩展regexp“commit(-)*ish” config.txt git-descripe.txt git-fast-import.txt git-name-rev.txt git-push.txt git-rebase.txt git-rev-parse.t

Git中提交ish和树ish的具体示例是什么

堆栈溢出问题涉及 特别是tree-ish,但我想更多地了解这两个方面

背景 文献中的用法 多次提及“提交”和 “像树一样”。例如,如果您正在检查:

$git grep--具有匹配项的文件--扩展regexp“commit(-)*ish”
config.txt
git-descripe.txt
git-fast-import.txt
git-name-rev.txt
git-push.txt
git-rebase.txt
git-rev-parse.txt
git.txt
gitcli.txt
glossary-content.txt
howto/revert-branch-rebase.txt
修订版.txt

$git grep--具有匹配项的文件--扩展regexp“tree(-)*ish”|\
$grep--反转匹配注释
diff-format.txt
diff-generate-patch.txt
git-archive.txt
git-cat-file.txt
git-checkout.txt
git-diff-index.txt
git-diff-tree.txt
git-ls-files.txt
git-ls-tree.txt
git-merge-tree.txt
git-read-tree.txt
git-reset.txt
git-svn.txt
git.txt
gitcli.txt
gittutorial-2.txt
glossary-content.txt
修订版.txt
定义 Git文档:


指示树对象名称

<commit>
<tree-ish>

指示提交对象名称

<commit>
<tree-ish>

指示树、提交或标记对象名称。接受
参数最终希望对
对象进行操作,但会自动执行 取消引用
和指向
对象

<commit-ish>

指示提交或标记对象名称。接受
参数最终希望对
对象进行操作,但会自动执行 解除指向
对象的引用

<commit-ish>
文件不够清楚 尽管上面的文档定义了什么是“提交ish”和“树ish”, 我仍然觉得它太模糊和不清楚

什么是“提交式”和“树式”的具体示例,它们是如何实现的 彼此不同?

简短的答案(TL;DR) 以下是提交ish和树ish标识符的完整列表(来自):

----------------------------------------------------------------------
|提交ish/树ish |示例
----------------------------------------------------------------------
|  1.                 | dae86e1950b1277e545cee180551750029cfe735
|  2.       | v1.7.4.2-679-G37FB
|  3.              | 主控,主管/主管,参考/主管/主管
|  4. @{{{昨天}主人{五分钟前}
|  5. @{}主控{1}
|  6. @{}                | @{1}
|  7. @{-}               | @{-1}
|  8. @{上游}主控{上游},{u}
|  9. ^                | 总目^,v1.5.1^0
| 10. ~             | 大师~3
| 11. ^{}v0.99.8^{提交}
| 12. ^{}v0.99.8^{}
| 13. ^{/}头^{/修复讨厌的错误}
| 14. :/              | :/修复讨厌的错误
----------------------------------------------------------------------
|仅限树型|示例
----------------------------------------------------------------------
| 15. :          | HEAD:README.txt,master:sub目录/
----------------------------------------------------------------------
|树腥味例子
----------------------------------------------------------------------
| 16. ::           | :0:自述,:自述
----------------------------------------------------------------------
标识符#1-14都是“commit-ish”,因为它们都会导致提交,但是 因为提交也指向目录树,所以它们最终都会导致 (子)目录树对象,因此也可以用作“树”

#15在引用(子)目录时也可以用作树ish,但是 也可用于识别特定文件。当它提到文件时,我不是 当然,如果它仍然被认为是“树一样的”,或者它的行为更像“斑点一样”(Git) 将文件称为“blob”)

长话短说 提交Git中的目录树和目录树 在最低级别,Git使用四种基本方法跟踪源代码 对象:

  • 带注释的标记,指向提交
  • 提交,它指向项目的根目录树
  • 树,即目录和子目录
  • blob,它们是文件
  • 自Linus Torvalds设计以来,每个对象都有自己的sha1哈希ID Git类似于文件系统,即可以检索文件 基于其内容(sha1 ID由文件内容生成)。亲吉特 本书给出:

    提交ish vs树ish 许多Git命令可以接受提交和(子)目录的特殊标识符 树木:

    • “Commit ish”是最终导致提交对象的标识符。比如说,

      tag->commit

    • “Tree-ish”是最终指向Tree(即目录)对象的标识符

      标记->提交->项目根目录

    因为提交对象总是指向目录树对象(根 项目的目录),任何“commit ish”标识符都是 定义,也就是“树”。换句话说,任何导致 提交对象还可用于引导(子)目录树对象

    但由于目录树对象在Git的版本控制中从不指向提交 系统中,并不是每个指向(子)目录树的标识符都可以 用于指向提交。换句话说,一组“提交”标识符 是一组“树型”标识符的严格子集。

    不能用作提交ish的树ish标识符集是

  • ,它直接将引导到目录树,而不是提交 物体。例如,
    HEAD:subdirectory

  • Sha1目录树对象的标识符