我可以指定Git提交哈希,而不是让Git生成它吗?
甚至可能吗?我没有在Git文档或在线中找到任何方法。
对于某些背景:我正在以编程方式从私有库中重新创建一个新的Git公共存储库。我需要对每个提交进行大量更改以删除机密信息。但我想保留提交ID。
答案 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)
我相信这是可能的,虽然它需要一些时间和工作,而且是一个黑客。 确实,哈希是由以下值生成的:
但是,如果您可以牺牲其中一个值的一致性,那么就可以完成。
这是一个例子:https://github.com/vog/beautify_git_hash
它是一个脚本,它进行提交,然后正在寻找一个特定的日期来使git hash成为你正在寻找的那个,然后用这个日期进行修改。
答案 3 :(得分:1)
如果您对提交进行更改,则ID将会更改。(它们依赖于提交内容本身,以及其中的更改)。
所以,没有。