即使我没有进行任何更改,为什么 git commit --amend 也会更改哈希值?

问题描述 投票:0回答:3

为什么即使我在运行后没有对提交(消息、文件)进行任何更改,我最新提交的 SHA-1 哈希值也会发生变化

git commit --amend

假设我在命令行运行以下命令。

cd ~/Desktop
mkdir test_amend
cd test_amend
git init
echo 'foo' > test.txt
git add test.txt
git commit -m 'initial commit'

然后,调用

git log --pretty=oneline --abbrev-commit

打印以下消息:

b96a901 initial commit

然后我就这么做了

git commit --amend

但我改变了主意并决定在上次提交中不更改任何内容。换句话说,我保留上次提交的文件、目录和消息不变(我只是保存消息文件并关闭编辑器)。

那么,我愿意

git log --pretty=oneline --abbrev-commit

再一次,我看到提交的哈希值已更改:

3ce92dc initial commit

什么原因导致哈希值发生变化?这与提交的时间戳有关吗?

git sha git-amend
3个回答
42
投票

是的,这是提交时间戳。检查两次提交的内容可以发现:

$ git cat-file commit 82c7363bcfd727fe2d6b0a98412f71a10c8849c9
tree d87cbcba0e2ede0752bdafc5938da35546803ba5
author Thomas <xxx> 1400700200 +0200
committer Thomas <xxx> 1400700200 +0200

hello

$ git cat-file commit 7432fcf82b65d9d757efd73ef7d6bff4707f99bd
tree d87cbcba0e2ede0752bdafc5938da35546803ba5
author Thomas <xxx> 1400700200 +0200
committer Thomas <xxx> 1400700214 +0200

hello

如果您在原始提交的同一秒内进行修改,大概您会得到相同的哈希值。


11
投票

创建提交 sha 对象时需要执行以下操作

  1. 树对象引用
  2. 父对象引用
  3. 作者姓名
  4. 作者提交带有时区的时间戳(例如对我来说是+530)[可能是 与提交者不同,例如在挑选樱桃的情况下]
  5. 提交者姓名
  6. 提交带有时区的时间戳(例如对我来说是+530)
  7. 提交消息

我试图找出为什么在重置后提交 SHA id 不同,并由具有相同父级和树对象引用的同一用户再次添加具有完全相同的提交消息的相同文件。


8
投票

修改 Git 提交会更改提交日期(与您最初运行

git log
时看到的日期不同——运行
git log --format=fuller
查看提交日期)。创建提交哈希时会考虑提交日期。

© www.soinside.com 2019 - 2024. All rights reserved.