Gibt es eine Möglichkeit, git-reflog dazu zu bringen, neben jedem Eintrag ein Datum anzuzeigen?

305

Der Befehl git-reflog zeigt standardmäßig nicht neben jedem Eintrag ein Datum an, was mir als seltsames Versehen erscheint. Ich denke das wäre sehr hilfreich.

Gibt es Befehlszeilenoptionen oder andere Optimierungen, mit denen angezeigt werden kann, wann jeder Reflog-Eintrag hinzugefügt wurde? Die Manpage erscheint nicht ...

Andrew Ferrier
quelle

Antworten:

453

Als der Mann Seite schreibt können Sie die Optionen für git log, sagen git reflog --pretty=shortoder andere , wie Sie möchten

Versuchen

git reflog --date=iso
Balog Pal
quelle
11
Dies ersetzt die Kopfnummer (oder was auch immer der richtige Begriff ist) durch das Datum. Kannst du beides haben?
Marco Eckstein
7
@Marco es scheint, dass Sie ein benutzerdefiniertes Format verwenden müssten : git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'. Ich habe einen Alias ​​dafür hinzugefügt: github.com/blueyed/dotfiles/commit/…
blueyed
1
@blueyed Nicht ganz dasselbe - der --date=isoBefehl im Reflog zeigt an, wann dieser Reflog-Eintrag erstellt wurde, nicht den Zeitpunkt des Commits. Schätzen Sie immer noch Ihren Alias, da ich ihn verwendet habe, um ein hübscheres Reflog zu erstellen.
Johan Henkens
36

Sie können die --walk-reflogsVariante verwenden von git log:

git log -g

Dies ist standardmäßig ziemlich ausführlich und gibt unter anderem das Datum aus. Sie können es mit dem Standardflag formatieren --pretty=.

Sie können den Befehl reflog auch direkt mit dem --pretty=Flag verwenden, um die Ausgabe zu formatieren.

git reflog --pretty='%cd %h %gd %gs'

%cdZeigt im obigen Format das Festschreibungsdatum links von der normalen Reflog-Ausgabe an.

Klas Mellbourn
quelle
9
%cd, zeigt das Datum des Commits an, auf das der Reflog leider zeigt, was nicht das ist, wonach ich (oder das OP) strebe: Wir wollen das Datum des Reflog-Eintrags.
Thanatos
10
git log --walk-reflogs --date=isohabe gerade meinen Tag gemacht
Alois Mahdal
7

Sie müssen ein benutzerdefiniertes Format verwenden:

git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)'

Im obigen Format %hist dies der Commit-Hash, %crdas relative Committer-Datum, %gsdas Reflog-Subjekt und %sdas Commit-Subjekt. In den Git-Log-Dokumenten finden Sie weitere mögliche Platzhalter. Wenn Sie beispielsweise %cianstelle von verwenden, %crwerden absolute Festschreibungsdaten angezeigt.

Sie können dies in Ihrer ~ / .gitconfig in einem benutzerdefinierten prettyFormat speichern und über einen Alias ​​darauf verweisen:

[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
blau
quelle
1
Das Problem dabei ist, dass %gdnicht das gleiche Datum wie @{now}angezeigt wird. Bei der Suche im Reflog kann es sehr wichtig sein, die genaue Zeit zu kennen ("Ich weiß, dass es um 8:57 Uhr im richtigen Zustand war", zum Beispiel).
ErikE
2
@ErikE - Ändern Sie einfach das cr, cium den vollständigen Zeitstempel jeder Aktion zu erhalten:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'
n1k31t4
6

Sagen Sie gitin welchem ​​Format, entweder gezählte reflogEinträge oder zeitgesteuerte reflogEinträge, dh

$ git reflog @{now}

$ git reflog @{0}
Gitster
quelle
Der Programmierer in mir mag die Daten der "natürlichen Sprache" nicht {}, aber glücklicherweise funktioniert diese Technik auch mit --date=iso.
mwfearnley
5

Hinweis Git 2.10 (Q3 2016) verbessert die Dokumentation zum Datum mit git reflog.

Siehe Commit 642833d , Commit 1a2a1e8 (27. Juli 2016) und Commit d38c7b2 , Commit 522259d , Commit 83c9f95 , Commit 2b68222 (22. Juli 2016) von Jeff King ( peff) .
Mit freundlicher Unterstützung von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 0d32799 , 08. August 2016)

Die rev-listOptionen werden aktualisiert :

Der Reflog-Bezeichner in der Ausgabe kann abhängig von einigen Regeln als ref@{Nth}(wo Nthist der umgekehrte chronologische Index im Reflog) oder als ref@{timestamp}(mit dem Zeitstempel für diesen Eintrag) angezeigt werden.

Es enthält : - ein Update über --date=raw:

zeigt das Datum als Sekunden seit der Epoche (1970-01-01 00:00:00 UTC), gefolgt von einem Leerzeichen und der Zeitzone als Versatz von UTC (a +oder -mit vier Ziffern; die ersten beiden sind Stunden und Die zweiten beiden sind Minuten.
Dh als ob der Zeitstempel mit formatiert wäre strftime("%s %z")).
Beachten Sie, dass die -localOption den seconds-since-epoch Wert (der immer in UTC gemessen wird) nicht beeinflusst , aber den zugehörigen Zeitzonenwert umschaltet.

Und eine neue Option: --date=unix

zeigt das Datum als Unix-Epochenzeitstempel (Sekunden seit 1970).
Wie bei --rawist dies immer in UTC und hat daher -localkeine Auswirkung.

VonC
quelle