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

465

Bagaimana saya bisa menampilkan git log output dengan (setidaknya) informasi ini:

* author
* commit date
* change

Saya ingin itu dikompresi menjadi satu baris per entri log. Apa format terpendek untuk itu?

(mencoba --format=onelinetetapi itu tidak menunjukkan tanggal)

Jesper Rønn-Jensen
sumber
2
Mungkin Anda menyukai versi berwarna saya: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

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.

Jesper Rønn-Jensen
sumber
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 [email protected] lsof is a dependency now.
0754f18 11 hours ago [email protected] Properly unmount, so detaching works.
336a3ac 13 hours ago [email protected] Show ami registration command if auto register fails
be2ad45 17 hours ago [email protected] Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago [email protected] 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

andsens
sumber
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
rajutan
sumber
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

Hannes Schneidermayer
sumber
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

Joe Generic
sumber
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
Sean
sumber
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

Míra
sumber
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      [email protected]
eaead2c 2011-09-30  More stuff that is not worth mentioning [email protected]
eb6a336 2011-09-22  Merge branch 'freebase' into development        [email protected]

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

cdunn2001
sumber
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)

Sam Hasler
sumber
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"
palik
sumber
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
MUH Mobile Inc.
sumber
0

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

Semoga ini membantu.

Varun Sharma
sumber