Dlaczego git AuthorDate różni się od CommitDate?

102

Przeszukuję dzienniki git i stwierdzam, że AuthorDate i CommitDate są nieco inne dla niektórych moich zatwierdzeń:

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

Autor i Commit to ta sama ja.

Jak to się stało? Jestem zdziwiony od wielu dni.

Jest ich więcej (dzieje się w 17 z 341 zatwierdzeń):

+------------------------------+-------------------------------+
| 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           |
+------------------------------+-------------------------------+
Monitor ryb
źródło
Hmm, wygląda na to, że dzieje się to podczas łączenia gałęzi.
Fish Monitor
1
Związane z: stackoverflow.com/questions/18750808/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Jeden nieoczekiwany efekt uboczny posiadania tych dwóch różnych dat: git logdomyślnie pokazuje tylko datę zatwierdzenia autora. Ale jeśli używasz --since, --until, --before, --after, terminy względne, git używa committer datę popełnienia zamiast! git log --since="yesterday"mogą nie wykazywać oczekiwanych rezultatów, jeśli Autor popełnić data różni się od committer datę popełnienia.
SherylHohman
Jeśli chodzi o to, czy scalanie może zmieniać daty, może to zależeć od tego, czy scalanie jest skonfigurowane w jakiś inny niż domyślny sposób, który modyfikuje zatwierdzenia. Na przykład git --squash mergejest dość powszechną strategią scalania, którą można skonfigurować (chociaż nie wygląda na to, że jest tutaj używana, została omówiona dla przykładu). Ponadto, jeśli git jest używany przez IDE lub git GUI, istnieje możliwość konfiguracji / funkcjonalności nieobecnej w CLI. Warto dwukrotnie sprawdzić, do czego jest skonfigurowane scalanie w środowisku, w którym jest ono wykonywane.
George Pantazes

Odpowiedzi:

160

The Data Autor zauważa przy tym popełnić pierwotnie wykonane (czyli po zakończeniu git commit). Zgodnie z dokumentacją git commitdatę autora można zmienić za pomocą --dateprzełącznika.

Data popełnienia ulega zmianie za każdym razem popełnić jest modyfikowana, na przykład podczas przebazowania gałąź gdzie popełniania jest na innym oddziale ( więcej ).

To samo może się zdarzyć, jeśli dokonasz zatwierdzenia i wyślesz łatkę do innej w celu zastosowania poprawki w innym repozytorium: data autora będzie datą twojego git commit, data zatwierdzenia zostanie ustawiona na tę datę, kiedy łatka zostanie zastosowana w drugie repozytorium.

Jeśli wyślesz poprawkę do dwóch współpracowników, będzie jedna data autora, ale dwie różne daty zatwierdzenia.

Jest to również wspomniane w Git Book :

Być może zastanawiasz się, jaka jest różnica między autora i committer . Autor jest osobą, która pierwotnie napisał łatkę, natomiast committer jest osoba, która ostatnia zastosowała poprawki. Tak więc, jeśli wyślesz łatkę do projektu i jeden z głównych członków ją zastosuje, oboje otrzymacie uznanie - ty jako autor i główny członek jako autor.

eckes
źródło
Czy moja sprawa stanie się podczas łączenia oddziałów?
Fish Monitor
3
Nie. Uważam, że data jest częścią SHA, więc jeśli nie wykonasz jakiejś operacji, która przepisuje historię, jak zmiana bazy, nie powinna się zmieniać.
asmeurer
2
Krótki opis tego, w jaki sposób powinniśmy spodziewać się zmiany znaczników czasu po dokonaniu wyboru, po poprawieniu lub ponownym bazowaniu przodków zatwierdzenia, byłby należycie doceniony. Bawiąc się git show -s --format="commit %cD author %aD" HEAD, wydawałoby się, że na przykład poprawienie komunikatu zmiany o git guiaktualizację obu, ale git commit --amendtylko zaktualizowanie daty autora. nieintuicyjne.
init_js
24

Data autora w zatwierdzeniu jest zachowywana przy rebase / cherry-pick itp. Ale data zatwierdzenia zostaje zmieniona.

Michael Anderson
źródło
Niektóre z tych zatwierdzeń nie są ani optymalizacją, ani zmianą bazy. Wyglądają jak połączenie innej gałęzi.
Fish Monitor
7
Tak też git commit --amend.
asmeurer