提交后我在git log
:
commit 86270b43fe954e78733f1a8f0c4378b954ad9de4
Author: abc <abc@abc.com>
Date: Sat Aug 31 12:04:32 2013 -0700
Adding file1 and file2
然后我做
abc@abc-ubuntu:~/gittest$ git commit --amend
但我保存编辑器缓冲区而不修改任何内容
现在再次git log
,我看到了
commit 632c8ddff3fd023e947e76350e0678ba2f04706d
Author: abc <abc@abc.com>
Date: Sat Aug 31 12:04:32 2013 -0700
Adding file1 and file2
请注意,即使我在git commit --amend
答案 0 :(得分:3)
你确实改变了一些事情:你改变了提交时间。你可以用
看到这个git show --format=fuller 86270b43fe954e78733f1a8f0c4378b954ad9de4
git show --format=fuller 632c8ddff3fd023e947e76350e0678ba2f04706d
看看两个提交日期,它们将不匹配。
正如在mvp的回答中暗示的那样,如果你设法复制提交日期/时间,你将获得相同的sha1。您可以通过设置GIT_COMMITTER_DATE
环境变量,将提交时间覆盖到您希望的任何值,包括原始提交中记录的确切提交时间:
GIT_COMMITTER_DATE=$(git log -1 --format=%cd) git commit --amend
现在,如果您不更改提交消息,则应该获得完全相同的提交。但除非你有理由不记录你重新发布的事实,否则你应该坚持使用默认值。
答案 1 :(得分:2)
是的,这是正确的 - 请注意,当您git commit --amend
没有修改任何文件或提交消息时,您仍然在创建新的提交对象,其中包含不同的时间戳,因此具有不同的SHA-1校验和。这是因为每个提交都有两个时间戳:它是由作者创建的(默认情况下在git log中显示),以及何时提交(默认隐藏)。
如果你能以某种方式完全复制提交对象中的所有内容,包括时间戳,那么就不会发生这种情况。