Git 两个人的提交是否可以具有相同的哈希?

Git 两个人的提交是否可以具有相同的哈希?,git,git-commit,internal,Git,Git Commit,Internal,更新:我把两件事混合在一起:第一行实际上指向目录(在下面的答案中有很好的解释),第二行指向父提交。我让第二个误导了我。谢谢大家的澄清 我在学习git,我在复制代码。我在一个叫做“做出承诺”的小节中,这不是第一次承诺。在她做出承诺后,她得到的是(出于格式原因,我划掉了她的电子邮件): 树ce72afb5ff229a39f6cce47b00d1b0ed60fe3556 母公司774b54a193d6cfdd081e581a007d2e11f784b9fe 作家玛丽·罗斯·库克 提交人玛丽·罗斯·库

更新:我把两件事混合在一起:第一行实际上指向目录(在下面的答案中有很好的解释),第二行指向父提交。我让第二个误导了我。谢谢大家的澄清


我在学习git,我在复制代码。我在一个叫做“做出承诺”的小节中,这不是第一次承诺。在她做出承诺后,她得到的是(出于格式原因,我划掉了她的电子邮件):

树ce72afb5ff229a39f6cce47b00d1b0ed60fe3556

母公司774b54a193d6cfdd081e581a007d2e11f784b9fe

作家玛丽·罗斯·库克

提交人玛丽·罗斯·库克

a2

而且,不可思议的是,我得到了(我划掉了我的个人信息)

树ce72afb5ff229a39f6cce47b00d1b0ed60fe3556

父级C96FBF6143CCEF645D1CB867B0547C399A9BCB3

作者

提交人

a2

比较当前树的两个散列,很明显我们都得到了相同的散列(我确实完全遵循她的代码)


所以我很好奇这是怎么可能的?我知道git可能会对当时的快照进行哈希运算,但我的MegaData肯定与她的不一样。有人知道会发生什么吗?

树散列是当前工作目录的散列-换句话说,任何两个具有相同文件和目录的目录都将具有相同的树散列

树是文件和目录的分层集合,与历史上的任何特定点无关。例如,如果您创建了一个文件,然后删除了该文件(没有其他中间提交),那么最终将得到与开始时相同的树

提交是项目历史中的一个点。提交指定一棵树,但也包含其他信息,如作者/提交者和时间、提交消息(作者在其中描述了更改的内容),最重要的是零个或多个父级,它们是存储库的以前状态。(您的第一次提交没有父级。此后的大多数提交在线性开发期间有一个父级,如果合并,则有多个父级。)

()

一旦你做了一些修改并提交了它们,你就会有一个
提交散列
。40个字符的SHA1哈希中发生哈希冲突的可能性非常非常非常小

SHA-1哈希是一个40个十六进制字符串。。。即每个字符4位乘以40。。。160位。现在我们知道10位大约是1000(准确地说是10^24),这意味着有100万个不同的SHA-1散列。。。10^48


这相当于什么?月球是由大约10^47个原子组成的。所以如果我们有10个卫星。。。你在其中一颗卫星上随机选取一个原子。。。然后继续,在他们身上再挑选一个随机原子。。。那么,您将两次选择同一个原子的可能性,就是两个git提交将具有相同的SHA-1散列的可能性

()


对于同一个父提交(
父哈希
),您也可以有两个或多个不同的提交,这也很好,但每个提交哈希都会有所不同。除非你出人意料地幸运,否则你会大发雷霆。

你问题的标题和正文不匹配。您指的是提交哈希还是树哈希?她的树和您的树具有相同的哈希,因为内容相同。您链接到的文章对此进行了解释:此blob文件包含data/letter.txt的压缩内容。它的名称是通过对其内容进行散列得到的。散列一段文本意味着在其上运行一个程序,将其转换为唯一标识原始文本的较小文本段。例如,Git哈希
a
2e65efe2a145dda7ee51d1741299f848e5bf752e
@Jubobs谢谢。我现在知道我错了。非常感谢你!这是非常清楚的。“月球是由大约1047个原子组成的”-猜测应该是10^47左右吧@丹洛,你看看。