显然相同的提交给出不同的sha1,为什么?

时间:2011-04-12 08:41:10

标签: git commit sha1

在使用我的脚本从存储库重新编写子树历史记录后,我将其与同一子树上的git filter-branch ...进行了比较。我看到初始提交有不同的sha1,虽然我期望它们是相同的(结果是这两个历史的所有提交都有不同的sha1)。

在两次提交中执行git show --format=raw <commit-sha1>会得到完全相同的输出(第一行除外,commit <commit-sha1>,引入结果)。

对象文件完全不同,但由于它们是二进制文件,我无法找出根本原因。

假设所有git版本彼此一致,可以解释为什么有2个不同的sha1?

谢谢

1 个答案:

答案 0 :(得分:14)

Git对提交哈希的输入包括元数据,例如树的SHA1,父级的SHA1,提交者的名称,电子邮件和提交日期,以及作者的姓名,电子邮件和提交日期。因此,当您重写历史记录时,提交者提交日期和树(因为您执行了filter-branch)可能已更改,因此提交的SHA1中存在差异。

有关提交格式的详细信息,您可以使用git cat-file commit <sha>,或查找Git Objects section of the Git Book