Czy istnieje sposób, aby git-reflog wyświetlał datę obok każdego wpisu?

303

Polecenie git-reflog domyślnie nie wyświetla daty obok każdego wpisu, co wydaje mi się dziwnym niedopatrzeniem; Myślę, że byłoby to bardzo pomocne.

Czy są jakieś opcje wiersza polecenia lub inne poprawki, które można zastosować, aby wyświetlały się, gdy dodawano każdy wpis dziennika logowania? Podręcznika nie jest w przygotowaniu ...

Andrew Ferrier
źródło

Odpowiedzi:

451

Jak pisze strona podręcznika, możesz używać opcji git log, powiedz git reflog --pretty=shortlub dowolnych innych

próbować

git reflog --date=iso
Balog Pal
źródło
11
To zastępuje numer głowy (lub jakikolwiek poprawny termin) datą. Czy możesz mieć jedno i drugie?
Marco Eckstein,
7
@Marco wydaje trzeba by użyć formatu niestandardowego: git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'. Dodałem do tego alias: github.com/blueyed/dotfiles/commit/…
blueyed
1
@blueyed Niezupełnie to samo - polecenie --date=isow reflog pokazuje, kiedy wpis został utworzony, a nie czas zatwierdzenia. Wciąż doceniam twój alias, ponieważ użyłem go do ładniejszego reflogu.
Johan Henkens
36

Możesz użyć --walk-reflogswariantu git log:

git log -g

Jest to domyślnie dość szczegółowe i drukuje datę między innymi. Możesz go sformatować za pomocą standardowej --pretty=flagi.

Możesz również użyć polecenia reflog bezpośrednio z --pretty=flagą, aby sformatować dane wyjściowe.

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

W powyższym formacie %cdpokazuje datę zatwierdzenia po lewej stronie normalnego wyjścia ponownego rejestrowania.

Klas Mellbourn
źródło
9
%cd, pokazuje datę zatwierdzenia, na którą wskazuje reflog, niestety, która nie jest tym, co ja (lub OP) jest po: chcemy daty wpisu reflogu.
Thanatos,
10
git log --walk-reflogs --date=isowłaśnie zrobiłem mój dzień
Alois Mahdal
7

Musisz użyć niestandardowego formatu:

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

W powyższym formacie %hjest hash zatwierdzenia, %crjest względną datą podmiotu zatwierdzającego , %gsjest przedmiotem ponownego logowania i %sjest przedmiotem zatwierdzenia. Przejrzyj dokumenty git-log, aby znaleźć inne możliwe symbole zastępcze. Na przykład użycie %cizamiast %crspowoduje wyświetlenie bezwzględnych dat zatwierdzenia.

Możesz zapisać to w swoim ~ / .gitconfig przy użyciu niestandardowego prettyformatu i odwoływać się do niego za pomocą aliasu:

[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
niebieskich
źródło
1
Problem polega na tym, że %gdnie pokazuje tej samej daty co @{now}. Podczas przeszukiwania rejestru, znajomość dokładnego czasu może być naprawdę ważna (na przykład „Wiem, że był we właściwym stanie o 8:57”).
ErikE
2
@ErikE - Wystarczy zmienić na, craby ciuzyskać pełny znacznik czasu każdej akcji:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'
n1k31t4
6

Poinformuj, gitw jakim formacie, zliczone reflogwpisy lub reflogwpisy czasowe , tj

$ git reflog @{now}

$ git reflog @{0}
gitster
źródło
Programiści we mnie nie lubią dat „naturalnego języka” wewnątrz {}, ale na szczęście ta technika również działa --date=iso.
mwfearnley
5

Uwaga git 2.10 (III kwartał 2016) poprawia dokumentację dotyczącą daty git reflog.

Zobacz zatwierdzenie 642833d , zatwierdzenie 1a2a1e8 (27 lipca 2016 r.) I zatwierdzenie d38c7b2 , zatwierdzenie 522259d , zatwierdzenie 83c9f95 , zatwierdzenie 2b68222 (22 lipca 2016 r.) Autor: Jeff King ( peff) .
Pomoc: Jeff King ( peff) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 0d32799 , 08 sierpnia 2016)

W rev-listopcji jest aktualizowana :

Oznaczenie reflog na wyjściu może być pokazane jako ref@{Nth}(gdzie Nthjest indeks chronologiczny w reflog) lub jako ref@{timestamp}(ze znacznikiem czasu dla tego wpisu), w zależności od kilku reguł.

Obejmuje : - aktualizację dotyczącą --date=raw:

pokazuje datę w sekundach od epoki (1970-01-01 00:00:00 UTC), po której następuje spacja, a następnie strefa czasowa jako przesunięcie względem UTC (a +lub -z czterema cyframi; pierwsze dwie to godziny, a drugie dwa to minuty).
To znaczy, jakby znacznik czasu został sformatowany za pomocą strftime("%s %z")).
Należy pamiętać, że -localopcja nie wpływa na seconds-since-epoch wartość (która jest zawsze mierzona w UTC), ale zmienia towarzyszącą wartość strefy czasowej.

I nowa opcja: --date=unix

pokazuje datę jako znacznik czasu epoki uniksowej (sekundy od 1970).
Tak jak w przypadku --raw, jest to zawsze w UTC i dlatego -localnie ma żadnego efektu.

VonC
źródło