Чому git AuthorDate відрізняється від CommDate?


102

Я переглядаю свої журнали git і виявляю, що AuthorDate та CommDate дещо відрізняються для деяких моїх зобов'язань:

commit 3a5912f90dc5227f308e99f95152fbee2301c59a
Author:     <hidden>
AuthorDate: Fri Jun 15 10:57:22 2012 +0800
Commit:     <hidden>
CommitDate: Fri Jun 15 11:14:37 2012 +0800

Автор і прихильність - це те саме, що я.

Як це відбувається? Я цілий день спантеличений.

Є більше (трапляється у 17 з 341 комітетів):

+------------------------------+-------------------------------+
| from_unixtime(authored_date) | from_unixtime(committed_date) |
+------------------------------+-------------------------------+
| 2012-06-15 10:57:22          | 2012-06-15 11:14:37           |
| 2012-06-15 14:39:54          | 2012-06-15 14:48:57           |
| 2012-06-19 12:28:21          | 2012-06-19 12:29:41           |
| 2012-06-21 18:16:25          | 2012-06-21 18:28:48           |
| 2012-06-26 17:30:54          | 2012-06-26 17:33:55           |
| 2012-07-13 11:41:43          | 2012-07-13 11:42:17           |
| 2012-07-13 11:56:02          | 2012-07-13 12:13:22           |
| 2012-07-13 12:05:09          | 2012-07-13 12:12:24           |
| 2012-07-12 18:38:49          | 2012-07-13 12:26:35           |
| 2012-07-13 11:00:47          | 2012-07-13 12:25:15           |
| 2012-07-16 14:10:54          | 2012-07-16 14:15:01           |
| 2012-07-13 12:56:51          | 2012-07-16 13:49:48           |
| 2012-07-16 14:10:54          | 2012-07-16 14:19:46           |
| 2012-07-24 16:05:05          | 2012-07-24 16:05:48           |
| 2012-07-24 17:42:58          | 2012-07-24 17:43:33           |
| 2012-07-24 17:42:58          | 2012-07-24 17:45:18           |
| 2012-07-26 16:55:40          | 2012-07-26 16:55:53           |
+------------------------------+-------------------------------+

Гм, здається, що відбувається при злитті гілок.
Монітор риб


Один несподіваний побічний ефект, пов’язаний із цими двома різними датами: git logза замовчуванням показує лише дату введення автора. Але якщо ви використовуєте --since, --until, --before, --after, відносні дати, Git використовує комміттер дату здійснення натомість! git log --since="yesterday"може не показати очікувані результати , якщо автор фіксації дата відрізняється від комміттер дати здійснення.
SherylHohman

Від того, чи може злиття змінювати дати, це може залежати від того, чи буде злиття налаштовано якимось способом, який не за замовчуванням модифікує коміти. Наприклад, git --squash mergeце дещо поширена стратегія злиття, яка може бути налаштована (хоча це не схоже на те, що вона використовується тут, вона виведена заради прикладу). Крім того, якщо git використовується через IDE або git GUI, в CLI немає можливості конфігурації / функціональності. Можливо, варто двічі перевірити, що налаштовано на ваше злиття в середовищі, в якому ви виконуєте злиття.
Джордж Пантазес

Відповіді:


160

В автор дата примітка коли здійснює спочатку було зроблено (тобто коли ви закінчили git commit). Згідно з документами git commit, дату автора можна змінити за допомогою --dateперемикача.

Фіксації дата отримує змінюється кожен раз , коли робить модифікуються, наприклад , коли перебазування гілки , в якій здійснює в на іншу гілку ( більш ).

Те саме може статися, якщо ви взяли на себе зобов’язання та надішлете свій патч іншому, щоб застосувати патч в іншому репо-файлі: дата автора буде датою вашої git commit, дата здійснення буде встановлена ​​на ту дату, коли патч застосовано в інший репо.

Якщо ви надішліть виправлення двом колегам, буде одна авторська дата, але дві різні дати фіксації.

Про це також йдеться у книзі Git :

Ви можете бути здивовані , що різниця між автором і комміттером . Автор це людина , який спочатку написав патч, в той час як комміттер це людина , який останнім застосував патч. Отже, якщо ви надсилаєте патч до проекту, і один з основних членів застосовує патч, ви обидва отримуєте кредит - ви як автор, а основний член як комітер


Чи відбудеться моя справа при злитті гілок?
Монітор риб

3
Ні. Я вважаю, що дата є частиною SHA, тому, якщо ви не виконаєте якусь операцію, яка переписує історію, як, наприклад, перезавантаження, вона не повинна змінюватися.
asmeurer

2
Короткий опис того, як слід очікувати зміни часових позначок після вибору вишні, після внесення змін або відмови від предків комітету, буде належним чином оцінено. Граючи з git show -s --format="commit %cD author %aD" HEAD, здавалося б, що, наприклад, внесення змін до повідомлення про фіксацію за допомогою git guiобох оновлень, а git commit --amendлише оновлення дати здійснення. неінтуїтивний.
init_js

24

Дата авторського зобов’язання на комітеті зберігається на базі rebase / cherry-pick тощо.


Деякі питання, про які йдеться, не є ні збиранням вишні, ні відшкодуванням. Вони схожі на злиття іншої гілки.
Монітор риб

7
Так і робить git commit --amend.
асмеурер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.