Output terpendek yang mungkin dari log git yang berisi penulis dan tanggal


Jawaban:


699

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

melakukan pekerjaan. Output ini:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Terinspirasi oleh pertanyaan stackoverflow: "git log output seperti svn ls -v" , saya menemukan bahwa saya dapat menambahkan params persis yang saya butuhkan.

Untuk mempersingkat tanggal (tidak menunjukkan waktu) gunakan --date=short

Jika Anda penasaran dengan opsi-opsi yang berbeda:
%h= disingkat commit hash
%x09= tab (karakter untuk kode 9)
%an= nama
%adpenulis = tanggal penulis (format hormat --tanggal = opsi)
%s= subjek
Dari kernel.org/pub/software/scm /git/docs/git-log.html (bagian PRETTY FORMATS ) dengan komentar dari Vivek.


6
... dan juga bermanfaat untuk menambahkan date=shortseperti cdunn2001 yang disarankan dalam jawaban lain
Jesper Rønn-Jensen

10
git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Oneliner

143
git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
Bumbui

16
Tabel kolom lebar tetap:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 郝海东 冠状 病 六四 事件 事件

15
Jika Anda penasaran tentang opsi-opsi yang berbeda:% h = disingkat komit hash,% x09 = tab (karakter untuk kode 9),% an = nama penulis,% iklan = tanggal penulis (format hormat --tanggal = opsi), % s = subjek. Dari kernel.org/pub/software/scm/git/docs/git-log.html (bagian PRETTY FORMATS)
Vivek

204

Saya menggunakan dua pengaturan .gitconfig ini:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% iklan adalah tanggal penulis, yang dapat dilampaui oleh --dateatau opsi yang ditentukan dalam bait [log] di .gitconfig. Saya suka tanggal yang relatif karena itu memberikan perasaan langsung ketika hal-hal itu dilakukan. Output terlihat seperti ini:

6c3e1a2 2 hours ago you@me.com lsof is a dependency now.
0754f18 11 hours ago you@me.com Properly unmount, so detaching works.
336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails
be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago you@me.com Shorten while loops

Ini semua tentu saja dalam warna, sehingga mudah untuk membedakan berbagai bagian dari garis log. Juga itu adalah default ketika mengetik git logkarena bagian [format].

UPDATE 2014: Karena git sekarang mendukung padding, saya punya amandemen yang bagus untuk versi di atas:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

Hak ini menyelaraskan tanggal relatif dan kiri meluruskan nama-nama committer, yang berarti Anda mendapatkan tampilan seperti kolom yang mudah di mata.

Tangkapan layar

  ss # 1

UPDATE 2016: Karena penandatanganan komitmen GPG menjadi sesuatu, saya pikir saya akan memperbarui posting ini dengan versi yang menyertakan verifikasi tanda tangan (dalam tangkapan layar itu adalah huruf magenta tepat setelah komit). Penjelasan singkat tentang bendera:

% G ?: tunjukkan "G" untuk tanda tangan yang baik (valid), "B" untuk tanda tangan yang buruk, "U" untuk tanda tangan yang baik dengan validitas tidak diketahui dan "N" tanpa tanda tangan

Perubahan lain termasuk:

  • warna sekarang dihapus jika outputnya untuk sesuatu selain tty (yang berguna untuk menangkap dll)
  • git log -g sekarang berisi pemilih reflog.
  • Simpan 2 parens di refnames dan letakkan di bagian akhir (untuk mempertahankan penyelarasan kolom)
  • Potong tanggal relatif jika terlalu lama (mis 3 years, 4.. )
  • Pangkas nama komiter (mungkin sedikit pendek untuk beberapa orang, cukup ubah %<(7,trunc)atau periksa fitur git .mailmap untuk mempersingkat nama komiter)

Inilah konfigurasi:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

Semua dalam semua perataan kolom sekarang dipertahankan jauh lebih baik dengan mengorbankan beberapa (semoga) karakter yang tidak berguna. Jangan ragu untuk mengedit jika Anda memiliki perbaikan, saya ingin membuat warna pesan tergantung pada apakah komit ditandatangani, tetapi sepertinya itu tidak mungkin untuk dilakukan.

Tangkapan layar

Tangkapan layar git log


3
Anda dapat memperpendek garis lebih dengan menggunakan peta surat . Saya telah menyingkat nama rekan kerja di tempat kerja saya menjadi hanya nama depan mereka :-)
andsens

2
Jawaban --pretty format bagus, dan tigjawabannya memberikan interaktivitas tanpa konfigurasi yang diperlukan, tetapi yang ini brilian - memberikan output satu baris yang diminta (dengan warna untuk boot!) Menggunakan perintah 'git log' standar. Sangat bagus.
Brent Faust

Saat menggunakan - kanan-kiri, saya tidak mendapatkan > <tanda lagi. Mencoba menambah %mformat, tetapi kemudian >muncul setiap waktu, bahkan untuk yang normal git log. Adakah petunjuk bagaimana tanda memiliki perilaku normal dengan format?
Vituel

1
@AlvaroCavalcanti tentu tidak masalah! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ TrầnViệtHoàng --onelinehanyalah alias untuk --pretty=oneline. format.prettyadalah format cantik default, tetapi tidak ada cara untuk menimpa format.onelineafaik. Apa yang akan saya lakukan adalah menghilangkan pretty = shortlogbaris dalam konfigurasi dan kemudian membuat alias untuk menjalankan git log --pretty=shortlog.
andsens

99
git log --pretty=format:"%H %an %ad"

gunakan --date=untuk mengatur format tanggal

git log --pretty=format:"%H %an %ad" --date=short

1
Bagus! Lain kali aku akan mungkin hanya menggunakan% h lebih% H sebagai hash ini hanya omong kosong untuk mata manusia saya :)
Jesper Ronn-Jensen

sesuai keinginan kamu. saya hanya memberi contoh sederhana;)
knittl

2
Keren! Saya tidak mengetahui --tanggal = pendek
Jesper Rønn-Jensen

3
Hanya melempar ini ke sana (terlambat 8 ​​tahun): hash mungkin terlihat seperti omong kosong, tapi ini alat yang berguna jika Anda ingin mencoba atau membandingkan komitmen. Sering kali Anda daftar hash bukan karena memiliki makna, tetapi karena memiliki penggunaan
stevendesu

81

Jangan ragu untuk menggunakan yang ini:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Perhatikan -7di bagian akhir, untuk hanya menampilkan 7 entri terakhir.

Lihat:

masukkan deskripsi gambar di sini


3
--date=shortdapat ditambahkan untuk membuatnya lebih pendek.
xuhdev

@ Henry, Di mana nama cabang?
Pacerier

@Pacerier git logselalu menunjukkan riwayat cabang yang sedang diperiksa.
Hannes Schneidermayer

Tambahkan %duntuk mengembalikan "nama ref" seperti (HEAD -> master).
2540625

Kenapa menggunakan resetbukan auto?
2540625

49

tig adalah alternatif yang memungkinkan untuk menggunakan perintah git log , tersedia di distribusi open source * nix utama.

Pada debian atau ubuntu coba instal dan jalankan sebagai berikut:

$ sudo apt-get install tig

(tig terinstal)

$ tig

(log ditampilkan dalam pager sebagai berikut, dengan hash komit saat ini ditampilkan di bagian bawah)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Karena penurunan harga tidak mendukung pewarnaan teks, bayangkan: kolom 1: biru; kolom 2: hijau; kolom 3: warna teks standar. Baris terakhir, disorot. Tekan Q atau q untuk keluar.


tigmembenarkan kolom tanpa tepi yang kasar , yang tidak dijamin oleh tab ascii (% x09).

Untuk format tanggal pendek, tekan kapital D (catatan: huruf kecil d membuka tampilan berbeda.) Konfigurasikan secara permanen dengan menambahkan show-date = shortke ~ / .tigrc; atau di [tig]bagian dalam .git / configure atau ~ / .gitconfig.

Untuk melihat seluruh perubahan :

  • tekan Enter . Sub panel akan terbuka di bagian bawah jendela.
  • gunakan tombol k , j untuk menggulir perubahan di sub panel.
  • pada saat yang sama, gunakan tombol naik , turun untuk berpindah dari komit ke komit.

Karena tig terpisah dari git dan tampaknya khusus * nix, mungkin memerlukan cygwin untuk menginstal di windows. Tapi untuk fedora saya percaya menginstal perintah yang $ su, (enter root password), # yum install tig. Untuk freebsd mencoba % su, (enter root password), # pkg_add -r tig.


Ngomong-ngomong, tig lebih baik daripada melihat log dengan cepat: Screenshot & Manual


berikan contoh lengkap. Menulis tigdi konsol saya hanya memberi saya kesalahan-bash: tig: command not found
Jesper Rønn-Jensen

10
Wow. alat ini luar biasa, dan sangat cepat! buatan pasang tig
adu banteng

jika Anda menggunakan mac, buat instalasi tig
Pedro Brasileiro

1
pada Windows, pengguna babun dapatpact install tig
obojdi

34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

atau

git log --pretty=format:'%h %ad %s | %an' --date=short  

... membaca jawaban cdunn2001 di atas: Saya akan kehilangan e = mail penulis dan hanya menyertakan nama penulis, sesuai Jesper dan knittl, tetapi sesuai dengan gagasan cdunn2001 tentang mempertahankan output dalam kolom dengan lebar konstan untuk kemudahan membaca ( ide yang hebat!). Sebagai pengganti kolom dibenarkan kiri terpisah untuk nama penulis, bagaimanapun, saya membungkus bendera itu di akhir perintah dengan tanda kurung atau mengimbanginya dengan pipa. (Bisa benar-benar karakter apa pun yang berfungsi sebagai alat bantu visual dalam membaca output ... walaupun mungkin masuk akal untuk menghindari back atau forward slash untuk mengurangi membingungkan output dengan direktori atau sesuatu.)

Output sampel:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac

31

Gunakan alias git yang sudah ditentukan sebelumnya, yaitu:

$ git work

Dibuat sekali dengan perintah:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

Atau lebih berwarna dengan grafik:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

masukkan deskripsi gambar di sini


Ya, saya suka yang ini!
Alex

8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Hasil:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

Lebar hal konstan adalah yang pertama. Bagian yang paling tidak penting - domain email - adalah yang terakhir dan mudah difilter.


4

Untuk menunjukkan komitmen yang telah saya siapkan untuk mendorong saya lakukan

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

Outputnya terlihat seperti:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Di mana kolom pertama muncul dengan warna kuning, dan 'H' 'm' dan 't' dalam parentesis menunjukkan HEAD, master dan trunk dan muncul dalam warna "--decorate" yang biasanya

Ini dia dengan jeda baris sehingga Anda dapat melihat apa yang dilakukannya:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

Saya telah alias "dipentaskan" dengan:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(Apakah ada cara yang lebih mudah untuk melarikan diri dari itu? Agak sulit untuk mengetahui apa yang perlu melarikan diri)


Versi skrip saya saat ini adalah ~ 300LOC dan melakukan lebih banyak lagi: ¶ - opsi untuk beralih pesan komit oneline / multiline¶ - tampilkan baris spasi putih / baris berakhir pada mode oneline. misal: ¶ - tentukan rentang via param¶ - Soroti masalah # 's¶ - highlight / ^ - (Perbaiki | Tambahkan | Refactor) / dalam pesan komit¶
Sam Hasler

Untuk penawaran alias kuat, lihat jawaban ini . Peduli untuk membagikan ~ 300LOC Anda dalam inti?
Tom Hale

Terima kasih tom! jika saya memutar untuk memposting skrip itu (saya perlu menghapus beberapa hal rahasia / perusahaan tertentu) saya akan ping Anda di sini.
Sam Hasler

1

Semua saran yang disebutkan di atas menggunakan %splaceholder untuk subjek. Saya akan merekomendasikan untuk menggunakan %Bkarena %smemformat mempertahankan baris baru dan beberapa komit pesan baris muncul terjepit.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

0

Jalankan ini di folder proyek:

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

Dan jika Anda suka, tambahkan baris ini ke ~ / .gitconfig Anda:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all

0

Coba git log --pretty = lebih lengkap, ia akan menunjukkan kepada Anda: - Penulis: Tanggal Penulis: Komit: Tanggal Komit:

Semoga ini membantu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.