Warum unterscheidet sich git AuthorDate von CommitDate?

102

Ich schaue in meinen Git-Protokollen nach und stelle fest, dass sich AuthorDate und CommitDate für einige meiner Commits geringfügig unterscheiden:

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

Der Autor und Commit ist das gleiche ich.

Wie kommt es dazu? Ich bin tagelang verwirrt.

Es gibt noch mehr (passiert in 17 von 341 Commits):

+------------------------------+-------------------------------+
| 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           |
+------------------------------+-------------------------------+
Fischmonitor
quelle
Hmm, es scheint, als würde es beim Zusammenführen von Zweigen passieren.
Fisch - Monitor
1
Siehe auch
Ciro Santilli 14 冠状 病 六四 事件 法轮功
Ein unerwarteter Nebeneffekt dieser beiden unterschiedlichen Daten: git logStandardmäßig wird nur das Festschreibungsdatum des Autors angezeigt. Aber wenn Sie verwenden --since, --until, --before, --after, relative Daten, git verwendet die Committer commit statt Datum! git log --since="yesterday"Möglicherweise werden die erwarteten Ergebnisse nicht angezeigt, wenn sich das Festschreibungsdatum des Autors vom Festschreibungsdatum des Committers unterscheidet .
SherylHohman
Ob das Zusammenführen die Daten ändern kann, hängt möglicherweise davon ab, ob das Zusammenführen auf eine nicht standardmäßige Weise konfiguriert ist, die Commits ändert. Beispielsweise git --squash mergehandelt es sich um eine häufig verwendete Zusammenführungsstrategie, die möglicherweise konfiguriert wird (obwohl sie nicht so aussieht, als würde sie hier verwendet, wird sie beispielsweise angeführt). Wenn Git über eine IDE oder eine Git-GUI verwendet wird, besteht die Möglichkeit, dass Konfiguration / Funktionalität in der CLI nicht vorhanden sind. Es kann sich lohnen, noch einmal zu überprüfen, wofür Ihre Zusammenführung in der Umgebung konfiguriert ist, in der Sie die Zusammenführung durchführen.
George Pantazes

Antworten:

160

Das Autorendatum gibt an, wann dieses Commit ursprünglich vorgenommen wurde (dh wann Sie das Commit abgeschlossen haben git commit). Laut den Dokumenten von könnte git commitdas Autorendatum mit dem --dateSchalter überschrieben werden .

Das Commit Datum wird jedes Mal , die geändert Commit geändert werden, wenn beispielsweise die Verzweigung Rebasing wo der Commit auf einem anderen Zweig ist ( mehr ).

Dasselbe kann passieren, wenn Sie Ihren Commit durchführen und Ihren Patch an einen anderen senden, um den Patch in einem anderen Repo anzuwenden: Das Autorendatum ist das Datum Ihres git commitPatches, das Commit-Datum wird auf das Datum festgelegt, an dem der Patch angewendet wird das andere Repo.

Wenn Sie den Patch an zwei Kollegen senden, gibt es ein Autorendatum, aber zwei unterschiedliche Festschreibungsdaten.

Dies wird auch im Git-Buch erwähnt :

Sie fragen sich vielleicht, was der Unterschied zwischen Autor und Committer ist . Der Autor ist die Person, die den Patch ursprünglich geschrieben hat, während der Committer die Person ist, die den Patch zuletzt angewendet hat. Wenn Sie also einen Patch an ein Projekt senden und eines der Kernmitglieder den Patch anwendet, erhalten Sie beide eine Gutschrift - Sie als Autor und das Kernmitglied als Committer

eckes
quelle
Wird mein Fall beim Zusammenführen von Zweigen auftreten?
Fisch - Monitor
3
Nein. Ich glaube, das Datum ist Teil der SHA. Wenn Sie also keine Operation ausführen, bei der der Verlauf neu geschrieben wird, z. B. eine Neugründung, sollte sich dies nicht ändern.
Asmeurer
2
Eine kurze Beschreibung, wie wir erwarten sollten, dass sich die Zeitstempel nach einem Kirschpflücken, nach einer Änderung oder einer Neubasierung der Vorfahren des Commits ändern, wäre gebührend willkommen. Wenn git show -s --format="commit %cD author %aD" HEADSie damit herumspielen, scheint es, als würden Sie beispielsweise die Festschreibungsnachricht mit git guibeiden Aktualisierungen ändern , aber git commit --amendnur das Festschreibungsdatum aktualisieren. nicht intuitiv.
init_js
24

Das Autorendatum für ein Commit bleibt bei Rebase / Cherry-Pick usw. erhalten. Das Commit-Datum wird jedoch geändert.

Michael Anderson
quelle
Einige der fraglichen Commits sind weder Kirschernte noch Rebasing. Sie sehen aus, als würden sie einen anderen Zweig zusammenführen.
Fisch - Monitor
7
Das tut es auch git commit --amend.
Asmeurer