Git commit --amend - 如果没有更改,提交哈希值会发生变化

6

我希望你能帮我纠正一下我的理解,但我不确定为什么会发生这种情况。

使用git时,如果我对文件进行更改,然后提交,我会得到一个新的哈希值,因为文件已更改。

我对git commit --amend的理解是我可以对上次提交进行更改。

现在我可以理解,如果我更改提交消息,哈希值将会改变。

但是当我没有做任何更改,只是保存并退出编辑器(可能我改变了主意不需要更改)时,为什么哈希值会改变呢? 所有的文件和其他东西都是相同的,但我已经保存了它。当我运行git log命令时,提交时间没有改变,它只是以相同的时间、相同的消息、相同的文件出现两次在日志中,除了不同的提交哈希值之外。

如果没有进行任何更改,为什么会改变呢?

1个回答

7

Git哈希值是使用多个项目计算的,包括作者名称/日期、提交名称/日期、提交信息、树和父SHA等。当您修改提交时,提交名称和日期将会更新。(通常情况下,除非您向git log传递其他格式选项,否则不会看到提交名称和日期。)由于已经更新了提交名称和日期,因此在提交被修改时,提交哈希值也会发生变化。


mipadi 是完全正确的。您只是创建了一个新的提交并将先前的提交更改添加到其中,取代了先前的提交。 - gran_profaci
啊,那很有道理,感谢您的更新。所以,只是为了澄清一下,有没有任何方法可以不进行更改而不改变哈希值? - jwknz
@JeffKranenburg:不过,如果你只是想中止一个 git commit --amend,那么当 Git 提示你编辑提交信息时,直接删除整个提交信息可能会更容易。Git 不会接受空白信息,而是会中止提交。 - mipadi
太棒了,我会试着玩一下。 - jwknz
刚刚又做了一些尝试,如果我什么都不改变,包括日期和作者,但保存文件,则提交哈希值会发生变化。我不确定为什么,但这就是我的系统表现。 - jwknz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接