pushed - git переименовать коммит




Почему git совершает-изменяет хэш, даже если я не вношу никаких изменений? (2)

Почему хэш SHA-1 моего последнего изменения фиксации, даже если я не git commit --amend никаких изменений в фиксацию (сообщение, файлы) после запуска 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 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

Если вы исправили за ту же секунду, что и первоначальная фиксация, предположительно, вы получите тот же хеш.


Изменение поправки Git изменяет дату фиксации (которая отличается от даты, которую вы изначально видите при запуске git log run git log --format=fuller чтобы увидеть дату фиксации). Дата фиксации принимается во внимание при создании хэша commit.





amend