即使我不修改任何内容,commit sha1sum也会被更改

时间:2013-08-31 19:13:02

标签: git

提交后我在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

期间没有更改任何内容,两次提交的sha1sum也不同

2 个答案:

答案 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中显示),以及何时提交(默认隐藏)。

如果你能以某种方式完全复制提交对象中的所有内容,包括时间戳,那么就不会发生这种情况。