Чому git commit -amend змінити хеш, навіть якщо я не вношу ніяких змін?

Чому хеш 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 

Що змушує хеш змінюватися? Це пов'язано з міткою часу фіксації?

22
21 мая '14 в 22:20 2014-05-21 22:20 заданий Jubobs 21 травня '14 о 22:20 2014-05-21 22:20
@ 3 відповідей

Так, це мітка фіксації. Перевірка вмісту двох коммітов показує:

 $ 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 

Якщо ви внесете зміни за ту ж секунду, що і оригінал, імовірно, ви отримаєте той же хеш.

20
21 мая '14 в 22:29 2014-05-21 22:29 відповідь дан Thomas 21 травня '14 о 22:29 2014-05-21 22:29

Наступне відбувається в створенні об'єкта commit sha

  • посилання на об'єкт дерева
  • посилання на батьківський об'єкт
  • ім'я автора
  • автор фіксує мітку часу до часового поясу (наприклад, для мене її +530) [може бути відрізняється від коммітера, наприклад, в разі збору вишні]
  • ім'я комміттера
  • фіксувати мітку часу до часового поясу (наприклад, для мене його +530)
  • повідомлення фіксації
border=0

Я намагався з'ясувати, чому commit SHA-ідентифікатори відрізняються після скидання і знову додають один і той же файл з одним і тим же повідомленням про когось тоте одним і тим же користувачем з тієї ж посиланням на батьківський і деревовидний об'єкт.

4
07 марта '15 в 20:20 2015-03-07 20:20 відповідь дан Abhijit Mazumder 07 березня '15 о 20:20 2015-03-07 20:20

Внесення змін до фіксацію Git змінює дату фіксації (яка відрізняється від дати, яку ви спочатку бачите при запуску git log - run git log --format=fuller , щоб побачити дату фіксації). Дата фіксації береться до уваги при створенні хеша commit.

3
21 мая '14 в 22:24 2014-05-21 22:24 відповідь дан mipadi 21 травня '14 о 22:24 2014-05-21 22:24

Інші питання по мітках або Задайте питання