让我通过说我知道发生这种情况极其微不足道的几率来说明这一点.我知道制造它或多或少是不可能的,并且极不可能"在野外"发生.这只是关于Git内部的假设问题.
所以,这是我的问题:如果两个Git提交哈希相同,会发生什么?对于初学者:
我的旧答案“ git 如何处理 blob 上的 SHA-1 冲突? ”仍然适用,即使是提交而不是 blob。
正如torek在评论中提到的那样,git 只是将一切视为“对象”,每个对象都有自己的 SHA1。
(图像来自Git Internals - ProGit Book v2 的Git 参考章节)
虽然提交可能不会成功(有几次检查git-commit-tree.c),但您还必须考虑在存储库 A 和 B...以及存储库 A 中创建具有相同 SHA1(以及以某种方式不同的内容)的两个提交的情况正在获取回购 B!
提交 8685da4(2007 年 3 月,git 1.5.1)解决了这个问题,并且获取将失败。
Commit 0e8189e(2008 年 10 月,git 1.6.1)确实提到了这一点,索引为 V2:
SHA1 引用被破坏的几率实际上与另一个具有相同大小的对象的 SHA1 匹配(增量标头存储要应用的基本对象的预期大小)几乎为零。
在解包对象时,它仍然实现了打包对象 CRC 检查。
下面提到的Git 代码是finalize_object_file()function,一个blame显示最近没有修改,大部分代码可以追溯到 Git (2005) 的最开始:没有创建新的提交。