Why does the SHA-1 hash of my latest commit change even if I don't make any changes to the commit (message, files) after running git commit --amend
?
Say I run the following at the command line.
cd ~/Desktop
mkdir test_amend
cd test_amend
git init
echo 'foo' > test.txt
git add test.txt
git commit -m 'initial commit'
Then, invoking
git log --pretty=oneline --abbrev-commit
prints the following message:
b96a901 initial commit
I then do
git commit --amend
but I change my mind and decide not to change anything in the last commit. In other words, I leave the files, directories, and message of the last commit untouched (I just save the message file and close my editor).
Then, I do
git log --pretty=oneline --abbrev-commit
one more time, I see that the hash of the commit has changed:
3ce92dc initial commit
What causes the hash to change? Does it have to do with the time stamp of the commit?
Amending a CommitIf you amend the commit message, or the files in a commit, this will change the git hash.
If you delete the commit message (no need to delete the ones starting with # ) you will abort the git commit --amend command. You will get output like this: Aborting commit due to empty commit message.
Amended commits are actually entirely new commits and the previous commit will no longer be on your current branch. This has the same consequences as resetting a public snapshot. Avoid amending a commit that other developers have based their work on.
Use the selected commit message without launching an editor. For example, git commit --amend --no-edit amends a commit without changing its commit message. Replace the tip of the current branch by creating a new commit.
Yes, it's the commit timestamp. Inspecting the contents of the two commits reveals:
$ 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
If you amended in the same second as the original commit, presumably you'd get the same hash.
Following things go in creating commit sha object
I was trying to figure out why commit SHA ids are different after resetting and again adding the same file with exact same commit message by the same user with same parent and tree object reference .
Amending a Git commit changes the commit date (which is different from the date you initially see when running git log
-- run git log --format=fuller
to see the commit date). The commit date is taken into account when creating the commit hash.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With