Warum unterscheidet sich git AuthorDate von CommitDate?

Lesezeit: 5 Minuten

1647290888 36 Warum unterscheidet sich git AuthorDate von CommitDate
Fischmonitor

Ich habe in meinen Git-Protokollen nachgesehen und festgestellt, dass sich AuthorDate und CommitDate für einige meiner Commits geringfügig unterscheiden. Von dem git log --pretty=fuller Ausgang:

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 derselbe (ich).

Wie kommt es dazu? Ich bin seit Tagen ratlos.

Es gibt noch mehr – es geschah 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           |
+------------------------------+-------------------------------+

  • Hmm, das scheint beim Zusammenführen von Zweigen zu passieren.

    – Fischmonitor

    8. August 2012 um 3:32 Uhr

  • Siehe auch: stackoverflow.com/questions/18750808/…

    – Ciro Santilli Путлер Капут 六四事

    14. April 2017 um 8:36 Uhr

  • Ein unerwarteter Nebeneffekt dieser beiden unterschiedlichen Daten: git log zeigt standardmäßig nur das Commit-Datum des Autors an. Aber wenn Sie verwenden --since, --until, --before, --afterrelative Daten, git verwendet stattdessen das Committer-Commit-Datum! git log --since="yesterday" zeigt möglicherweise nicht die erwarteten Ergebnisse, wenn die Autor Commit-Datum unterscheidet sich von dem Beauftragter Datum begehen.

    – SherylHohman

    15. April 2020 um 21:20 Uhr

  • Ob das Zusammenführen die Daten ändern könnte, hängt möglicherweise davon ab, ob das Zusammenführen auf eine nicht standardmäßige Weise konfiguriert ist, die Commits ändert. Zum Beispiel, git --squash merge ist eine etwas gebräuchliche Zusammenführungsstrategie, die konfiguriert werden kann (obwohl es nicht so aussieht, als würde es hier verwendet werden, wird es nur als Beispiel erwähnt). Wenn Git über eine IDE oder Git-GUI verwendet wird, besteht außerdem die Möglichkeit, dass die Konfiguration/Funktionalität nicht in der CLI vorhanden ist. 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

    8. Juli 2020 um 18:27 Uhr

  • Kannst du die bitte zeigen git log --format= Befehl, mit dem Sie den ersten Teil der codeformatierten Ausgabe in Ihrer Frage generiert haben?

    – Gabriel Staples

    7. März um 18:25 Uhr


1647290888 134 Warum unterscheidet sich git AuthorDate von CommitDate
Ecken

Die Autor Datum notiert, wann dieser Commit ursprünglich gemacht wurde (d. h. wann Sie die git commit). Laut den Dokumenten von git commitdas Autordatum kann mit überschrieben werden --date schalten.

Die Datum begehen wird jedes Mal geändert, wenn der Commit geändert wird, z. B. wenn der Zweig, in dem sich der Commit befindet, auf einen anderen Zweig umbasiert wird (mehr).

Dasselbe könnte passieren, wenn Sie Ihr Commit durchführen und Ihren Patch an einen anderen senden, um den Patch in einem anderen Repo anzuwenden: Das Autordatum ist das Datum Ihres git commitwird das Commit-Datum auf das Datum gesetzt, an dem der Patch im anderen Repository angewendet wird.

Wenn Sie den Patch an zwei Kollegen senden, gibt es ein Autordatum, aber zwei unterschiedliche Commit-Daten.

Dies wird auch in der erwähnt Git-Buch:

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

  • Wird mein Fall beim Zusammenführen von Filialen passieren?

    – Fischmonitor

    8. August 2012 um 4:40 Uhr

  • Nein. Ich glaube, das Datum ist Teil des SHA, also sollte es sich nicht ändern, es sei denn, Sie führen eine Operation durch, die den Verlauf neu schreibt, wie z. B. das Rebasing.

    – asmeurer

    8. August 2012 um 4:53 Uhr

  • Eine kurze Beschreibung, wie wir erwarten sollten, dass sich die Zeitstempel nach einer Rosinenauswahl, nach einer Änderung oder Neubasierung von Vorfahren des Commit ändern, wäre gebührend willkommen. Herumspielen mit git show -s --format="commit %cD author %aD" HEADes scheint, dass zum Beispiel das Ändern der Commit-Nachricht mit git gui aktualisiert beide, aber git commit --amend aktualisiert nur das Commit-Datum. nicht intuitiv.

    – init_js

    2. Februar 2017 um 10:36 Uhr


Das Autordatum auf einem Commit wird bei Rebase / Cherry-Pick usw. beibehalten. Das Commit-Datum wird jedoch geändert.

  • Einige fragliche Commits sind weder Rosinenpickerei noch Rebasing. Sie sehen aus, als würden sie einen anderen Zweig zusammenführen.

    – Fischmonitor

    8. August 2012 um 4:39 Uhr

  • So auch git commit --amend.

    – asmeurer

    8. August 2012 um 4:51 Uhr

  • Ebenso gut wie squash oder fixup und reword

    – Danon

    13. November 2020 um 15:35 Uhr


Ich war zufällig in einer Situation, in der Github andere Commit-Zeiten anzeigte git log und ich dachte, das wäre ein Bug mit Github.

Es stellt sich heraus, dass github die zeigt CommitDate und git log zeigt die AuthorDate (ohne das fuller Flagge).

Dies geschah, weil ich zwei Commits aus einem anderen Branch herausgesucht habe. Während des Rosinenpickens ändern sich die Commit-Zeitstempel genauso wie beim Ausführen commit --append.

Git rebase hat in meinem Fall das Commit-Datum beibehalten.

Verwenden Sie auch das AuthorDate und das CommitDate im Git-Protokoll --format=fuller Dokumente

  • Vielen Dank für diese Erklärung! Ich habe das vor Monaten bemerkt und konnte die Diskrepanz nicht herausfinden, bis ich Ihre Erklärung gelesen habe. Die --format=fuller Flagge ist genial, davon wusste ich nichts!

    – langsam aber stetig

    30. August 2021 um 1:40 Uhr

1003100cookie-checkWarum unterscheidet sich git AuthorDate von CommitDate?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy