在使用我的脚本从存储库重新编写子树历史记录后,我将其与同一子树上的git filter-branch ...
进行了比较。我看到初始提交有不同的sha1,虽然我期望它们是相同的(结果是这两个历史的所有提交都有不同的sha1)。
在两次提交中执行git show --format=raw <commit-sha1>
会得到完全相同的输出(第一行除外,commit <commit-sha1>
,引入结果)。
对象文件完全不同,但由于它们是二进制文件,我无法找出根本原因。
假设所有git版本彼此一致,可以解释为什么有2个不同的sha1?
谢谢
答案 0 :(得分:14)
Git对提交哈希的输入包括元数据,例如树的SHA1,父级的SHA1,提交者的名称,电子邮件和提交日期,以及作者的姓名,电子邮件和提交日期。因此,当您重写历史记录时,提交者提交日期和树(因为您执行了filter-branch
)可能已更改,因此提交的SHA1中存在差异。
有关提交格式的详细信息,您可以使用git cat-file commit <sha>
,或查找Git Objects section of the Git Book。