Anscheinend das :
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
Filtert Commits basierend auf dem Committer-Datum . Wie kann ich festlegen, dass Commits für einen bestimmten Autorendatumsbereich angezeigt werden?
Antworten:
Das kannst du nicht - zumindest nicht allein in Git. (Erinnerung an andere , diese Frage zu besuchen: Es geht nicht darum , sehen den Autor Datum, es geht um Commits durch die Auswahl des Autors Datum, a la
--since
/--after
und--until
/--before
verwenden Diese Selektoren das. Committer Datum, nicht der Autor Datum Betrachten wir als ein extremes Beispiel ein begehen. "jetzt" gemacht, so dass sein Committer-Datum in den 2000er Jahren liegt, aber im Feld "Autorendatum" auf einen Tag im Jahr 1999 zurückdatiert ist. Wenn Ihr Auswahlbereich "jederzeit nahe der Jahrhundertwende" ist, werden Sie de -Wählen Sie dieses Commit aus, da sein Committer-Datum "jetzt" ist, mehr als ein Jahrzehnt nach 1999.)Ich halte dies für einen kleinen Fehler in Git: Sie sollten in der Lage sein, die Verwendung des Autorendatumsfelds überall dort anzufordern, wo Sie die Verwendung des Committer-Datumsfelds anfordern können. Dies ist leicht mit Protokoll Formatierung , da wir
%ad
und%cd
und dergleichen, aber nicht mit Auswahl begehen . Das nächste, das wir haben, ist dasgit rev-list
Sortieren nach Autorendatum (innerhalb der allgemeinen Toposortierung).Ein globaler Schalter in
git rev-list
, wie--use-author-date
würde als einfacher Patch arbeiten, und würde nicht allzu schwer zu Git hinzuzufügen, aber ich denke , es wäre besser , zu haben--min-author-age
und--max-author-age
oder ähnlich, und ein „sortiert nach Autor Datum“ Flag (unabhängig von das allgemeine--topo-order
Flag, so dass das Setzen beider Flags den gleichen Effekt hat wie--author-date-order
).Um dieses Problem zu umgehen, können Sie alle potenziell interessanten Commits auflisten (mit
git rev-list
oder gleichwertig, z. Bgit log
.: Verwenden Sie einen beliebigen Bezeichner, der Commits potenziell interessant macht, mit Ausnahme von Datumsfiltern: in diesem Fall ist dies nur der Fall--all
) und extrahieren Sie alle Felder für das Autorendatum (mitgit log --format=%at
oder was auch immer), schneiden Sie dann die Liste der Festschreibungs-IDs selbst ab und senden Sie die verbleibenden Festschreibungs-IDs erneut angit log --no-walk
. Aber das ist bestenfalls schmerzhaft. Weitere Informationen finden Sie in der Antwort von Tim Beigeleisen mit awk .quelle
Vielleicht fehlt mir etwas, aber würde das nicht reichen?
Siehe auch hier
quelle
%ad
Richtlinie zeigt Ihnen dieses 1999 verfasste Commit, auch wenn dies weit vor 2016 liegt!Du kannst .
Aber wie @torek bereits erwähnt hat, ist dies mit reinem Git möglicherweise nicht möglich. Eine Möglichkeit wäre, eine hübsche Formatausgabe von
git log
in zuawk
leiten und dort das Autorendatum zu überprüfen:Hier
%ad
gibt das Autorendatum im ISO-Format und%aN
den Autorennamen an.quelle
inspiriert von Tim Biegeleisens Antwort oben.
git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u
tat was ich brauchte. Ich möchte das Datum des Autors, nicht das Datum des Festschreibens, weil ich viel zurückdrücke und quetsche. Aber ich behalte wichtige Daten zu Import-Commits.
Im Zusammenhang damit habe ich einen kleinen Helfer, der es mir ermöglicht, die E-Mail des Autors zurückzusetzen, aber das Datum des ursprünglichen Autors beizubehalten. --reset-author überschreibt standardmäßig das Datum des Autors.
https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date
Im Git-Protokoll oben können Sie bei Bedarf hinzufügen
%H
, um die Githa zu erhaltenquelle
git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u