指定Git提交哈希

时间:2018-01-12 12:37:22

标签: git

我可以指定Git提交哈希,而不是让Git生成它吗?

甚至可能吗?我没有在Git文档或在线中找到任何方法。

对于某些背景:我正在以编程方式从私有库中重新创建一个新的Git公共存储库。我需要对每个提交进行大量更改以删除机密信息。但我想保留提交ID。

4 个答案:

答案 0 :(得分:5)

git commit hash是一个加密校验和,它是根据存储库的状态计算出来的,包括存储库中所有文件的哈希值,前一次提交的哈希值,当前日期和时间等。

无法手动指定。

更多信息,请参阅this question

答案 1 :(得分:3)

您可以使用git cat-file -p da500aa4f54cbf8f3eb47a1dc2c136715c9197b9获取的提交内容(匿名;))(替换为您的某个提交的sha1):

tree 48038c4d189536a0862a2c20ed832dc34bd1c8b2
parent f0bb5942f47193d153a205dc089cbbf38299dd1a
author Firstname Lastname <my@mail.com> 1513256382 +0100
committer Firstname Lastname <my@mail.com> 1515152927 +0100

This is a commit message

如果其中一个数据发生变化,则所有sha1都会发生变化。

  • tree是根据文件和目录内容计算的sha1。

  • Parent是父提交哈希。

  • 请注意,里面也有日期,所以如果你在不同时刻做同样的提交,那么sha1也会改变

PS:您可以继续使用命令git cat-file -p继续探索tree并更好地了解git存储数据的方式。

答案 2 :(得分:2)

我相信这是可能的,虽然它需要一些时间和工作,而且是一个黑客。 确实,哈希是由以下值生成的:

  • 含量
  • 提交日期
  • 以前提交的ID
  • ...

但是,如果您可以牺牲其中一个值的一致性,那么就可以完成。 这是一个例子:https://github.com/vog/beautify_git_hash
它是一个脚本,它进行提交,然后正在寻找一个特定的日期来使git hash成为你正在寻找的那个,然后用这个日期进行修改。

答案 3 :(得分:1)

如果您对提交进行更改,则ID将会更改。(它们依赖于提交内容本身,以及其中的更改)。

所以,没有。