Apakah ada cara untuk membuat git-reflog menampilkan tanggal di samping setiap entri?

305

Perintah git-reflog tidak secara default menunjukkan tanggal di samping setiap entri, yang menurut saya sebagai kekhilafan yang aneh; Saya pikir ini akan sangat membantu.

Apakah ada opsi baris perintah, atau tweak lain, yang dapat digunakan untuk membuatnya muncul ketika setiap entri reflog ditambahkan? The manualnya tidak akan datang ...

Andrew Ferrier
sumber

Jawaban:

453

Saat halaman manual menulis Anda dapat menggunakan opsi untuk git log, katakan git reflog --pretty=shortatau yang lain sesuka Anda

mencoba

git reflog --date=iso
Balog Pal
sumber
11
Ini menggantikan nomor kepala (atau apa pun istilah yang benar) dengan tanggal. Bisakah kamu memiliki keduanya?
Marco Eckstein
7
@Marco tampaknya Anda harus menggunakan format kustom: git reflog --format='%C(auto)%h %<|(17)%gd %C(blue)%ci%C(reset) %s'. Saya telah menambahkan alias untuk ini: github.com/blueyed/dotfiles/commit/…
blueyed
1
@blueyed Tidak persis sama - --date=isodi dalam perintah reflog menunjukkan kapan entri reflog itu dibuat, bukan waktu komit. Masih hargai alias Anda, karena saya sudah menggunakannya untuk membuat reflog yang lebih cantik.
Johan Henkens
36

Anda dapat menggunakan --walk-reflogsvarian git log:

git log -g

Ini agak bertele-tele secara default, dan mencetak tanggal di antara hal-hal lain. Anda dapat memformatnya dengan --pretty=bendera standar .

Anda juga dapat menggunakan perintah reflog secara langsung dengan --pretty=flag untuk memformat output.

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

Dalam format di atas, %cdmenunjukkan tanggal komit di sebelah kiri output reflog normal.

Klas Mellbourn
sumber
9
%cd, menunjukkan tanggal dari komit yang menjadi titik reflog, sayangnya, yang bukan merupakan tujuan saya (atau OP): kami ingin tanggal entri reflog.
Thanatos
10
git log --walk-reflogs --date=isobaru saja membuat hari saya
Alois Mahdal
7

Anda harus menggunakan format khusus:

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

Dalam format di atas, %hadalah hash komit, %cradalah tanggal %gskomuter relatif, adalah subjek reflog, dan, %sadalah subjek komit. Lihatlah dokumen git-log untuk placeholder lain yang mungkin. Misalnya, menggunakan %cibukannya %crakan menampilkan tanggal komit absolut.

Anda dapat menyimpan ini di ~ / .gitconfig menggunakan prettyformat khusus dan merujuknya melalui alias:

[alias]
    rl = reflog --pretty=reflog
[pretty]
    reflog = %C(auto)%h %<|(20)%gd %C(blue)%cr%C(reset) %gs (%s)
berwarna biru
sumber
1
Masalahnya adalah %gdini tidak menunjukkan tanggal yang sama dengan tanggal @{now}. Saat mencari reflog, mengetahui waktu yang tepat bisa sangat penting ("Saya tahu itu dalam kondisi yang tepat jam 8:57" misalnya).
ErikE
2
@ErikE - Hanya mengubah cruntuk cimendapatkan timestamp penuh dari setiap tindakan:git reflog --format='%C(auto)%h %<|(20)%gd %C(blue)%ci%C(reset) %gs (%s)'
n1k31t4
6

Katakan gitdalam format apa, baik reflogentri yang dihitung atau reflogentri waktunya , yaitu

$ git reflog @{now}

$ git reflog @{0}
gitster
sumber
Pemrogram dalam diri saya tidak suka tanggal "bahasa alami" di dalam {}, tetapi dengan senang hati teknik ini juga bekerja dengan baik --date=iso.
mwfearnley
5

Catatan git 2.10 (Q3 2016) meningkatkan dokumentasi tentang tanggal dengan git reflog.

Lihat komit 642833d , komit 1a2a1e8 (27 Jul 2016), dan komit d38c7b2 , komit 522259d , komit 83c9f95 , komit 2b68222 (22 Jul 2016) oleh Jeff King ( peff) .
Dibantu-oleh: Jeff King ( peff) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 0d32799 , 08 Agu 2016)

The rev-listPilihan diperbarui :

Penunjuk reflog dalam output dapat ditampilkan sebagai ref@{Nth}(di mana Nthindeks kronologis terbalik dalam reflog) atau sebagai ref@{timestamp}(dengan stempel waktu untuk entri itu), tergantung pada beberapa aturan.

Ini termasuk : - pembaruan tentang --date=raw:

menunjukkan tanggal sebagai detik sejak zaman (1970-01-01 00:00:00 UTC), diikuti oleh spasi, dan kemudian zona waktu sebagai offset dari UTC (a +atau -dengan empat digit; dua yang pertama adalah jam, dan yang kedua adalah menit).
Yaitu, seolah-olah cap waktu diformat dengan strftime("%s %z")).
Perhatikan bahwa -localopsi tidak memengaruhi seconds-since-epoch nilai (yang selalu diukur dalam UTC), tetapi mengubah nilai zona waktu yang menyertainya.

Dan opsi baru: --date=unix

menunjukkan tanggal sebagai cap waktu Unix zaman (detik sejak 1970).
Seperti halnya --raw, ini selalu dalam UTC dan karena itu -localtidak berpengaruh.

VONC
sumber