我不相信你可以在不重写历史记录的情况下完成这个任务。我刚才为了进行测试,克隆了同一个代码库两次。我在两个代码库中都做了相同的更改,然后使用相同的日志信息(“foobar”)提交了更改,唯一的区别就是其中一个签名了,而另一个没有。
# unsigned test
parent 50c6dd65f1d7a240cf6b5c9585ce363ef4708d1e
new b3ff731922f80a417b84ed492537c1f7ba74715e
# signed test
parent 50c6dd65f1d7a240cf6b5c9585ce363ef4708d1e
new 688b3be2e55558c45b00b6a6c02086a03768e02d
正如您所看到的,从相同的父级 (50c6dd65) 开始,结果是两个不同的提交哈希。因此对于未推送的提交,它与任何其他历史记录重写没有区别(因此具有相同的责任)。
回答您的评论,问哈希值是否仅因时间戳差异而更改,我不这样认为。如果您使用 cat-file
进行检查:
$ git cat-file -p 688b3be2e55558c45b00b6a6c02086a03768e02d
tree 074e53e54670dea3502229e9494f3d571f5dcc16
parent 50c6dd65f1d7a240cf6b5c9585ce363ef4708d1e
author Dan Lowe <dan@XXXXXXXX.com> 1448768563 -0500
committer Dan Lowe <dan@XXXXXXXX.com> 1448768563 -0500
gpgsig -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEVAwUAVlp0N1rGfrtJ2k+kAQIbYQf7BLx3/jqU/vwvoJOcbq5MPK0ok7B8mOaF
VWhNCbAeOBMzXdrn8IQxY2xYcPsy+d6pNx6ZOF70L3VZm6rWFxNzZQRrjS4ByOAM
VyoL8bXceMcrb/sQUHM5yTCaDcfoYx40K0q91XsGew2EIzNKcOraK1Ee4hEtPg1D
ojyPVjiWz2qMJJ0YYAATSvWwlKFO2ShTC6tGZDHrx0e6BAEN5QS4KdGhNech/vpU
IPFDjIKWtGPTbYY8Z95vKLAMYWPZDJ8j/x1gRytN8PDjRufRtpRnZMccB6JQoXNZ
5L23WQFfUFeXRdWf0MtkrbrSwzuaaIF8l1oGYnEtYT6nOIktPT47Fw==
=/U9b
-----END PGP SIGNATURE-----
foobar
gpgsig
数据意味着它将始终给出与未签名版本不同的哈希值。git show
查看它。您要做的是创建一个新的提交,其中包含等效的更改和元数据,但添加了签名,并使您当前所在的分支-即当前分支-指向它。
cat-file
的输出和我对其含义的分析。 - Dan Lowe