2

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

请注意,两个提交的 sha1sum 是不同的,即使我在此期间没有更改任何内容git commit --amend

4

2 回答 2

3

你确实改变了一些东西:你改变了提交时间。你可以看到这个

git show --format=fuller 86270b43fe954e78733f1a8f0c4378b954ad9de4
git show --format=fuller 632c8ddff3fd023e947e76350e0678ba2f04706d

看看这两个 CommitDates,它们不匹配。

正如 mvp 的回答所暗示的,如果您确实设法复制提交日期/时间,您将获得相同的 sha1。GIT_COMMITTER_DATE您可以通过设置环境变量将提交时间覆盖为您希望的任何值,包括原始提交中记录的确切提交时间:

GIT_COMMITTER_DATE=$(git log -1 --format=%cd) git commit --amend

现在,如果您不更改提交消息,您应该得到完全相同的提交。但除非您有理由记录您重新提交的事实,否则您可能应该坚持使用默认值。

于 2013-08-31T19:17:59.310 回答
2

是的,这是正确的 - 请注意,当您git commit --amend不修改任何文件或提交消息时,您仍在创建新的提交对象,其中具有不同的时间戳,因此具有不同的 SHA-1 校验和。这是因为每个提交都有两个时间戳:由作者创建的时间(默认显示在 git log 中)和提交的时间(默认隐藏)。

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

于 2013-08-31T19:17:31.340 回答