Yazar ve tarih içeren git günlüğünden mümkün olan en kısa çıktı


465

Bir git günlük çıktısını (en azından) bu bilgilerle nasıl gösterebilirim:

* author
* commit date
* change

Günlük girişi başına bir satıra sıkıştırılmasını istiyorum. Bunun için mümkün olan en kısa format nedir?

(denendi --format=onelineancak tarih gösterilmiyor)


2
Belki renkli versiyonumu
Hannes Schneidermayer

Yanıtlar:


701

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

işi yaptı. Bu çıktılar:

  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

Stackoverflow soru esinlenerek : "git log output svn ls -v gibi" , ben ihtiyacım tam params ekleyebilir öğrendim.

Tarihi kısaltmak için (saati göstermemek) --date=short

Farklı seçeneklerin ne olduğunu merak ediyorsanız:
%h= kısaltılmış kesin karması
%x09= sekmesi (kod 9 için karakter)
%an= yazar adı
%ad= yazar tarihi (biçim saygıları - tarih = seçenek)
%s= konu
Gönderen kernel.org/pub/software/scm /git/docs/git-log.html (PRETTY FORMATS bölümü) Vivek yorumuyla.


6
... ve date=shortbaşka bir cevapta cdunn2001'in önerdiği gibi eklemek de yararlıdır
Jesper Rønn-Jensen

10
En sevdiğim (kısa) oneliner şimdi yazardan önceki tarihi değiştirmek ve kısa tarihi kullanmak için:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen

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

16
Sabit genişlik sütunları tablosu: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
Farklı seçeneklerin ne olduğunu merak ettiyseniz:% h = kısaltılmış tamamlama karması,% x09 = sekme (kod 9 için karakter),% an = yazar adı,% ad = yazar tarihi (biçim saygıları - tarih = seçenek), % s = konu. Gönderen kernel.org/pub/software/scm/git/docs/git-log.html (PRETTY FORMATS bölümü)
Vivek

204

Bu iki .gitconfig ayarını kullanıyorum:

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

% ad, .gitconfig dosyasındaki --date[log] stanza'da geçersiz kılınabilecek yazar tarihidir. Göreceli tarihi seviyorum çünkü işlerin ne zaman yapıldığı hakkında hemen bir his veriyor. Çıktı şöyle görünür:

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

Bu elbette renklidir, bu nedenle bir günlük çizgisinin çeşitli bölümlerini ayırt etmek kolaydır. Ayrıca git log, [format] bölümü nedeniyle yazarken varsayılan değerdir .

2014 GÜNCELLEME: git artık doldurmayı desteklediğinden yukarıdaki sürüme hoş bir değişiklik yapıyorum:

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

Bu sağ, göreli tarihleri ​​ve sola doğru değiştiren isimleri hizalar, yani göze kolay gelen sütun benzeri bir görünüm elde edersiniz.

Ekran görüntüsü

  ss 1.

2016 GÜNCELLEME: GPG taahhüdü imzalama bir şey haline geldiğinden, bu yayını imza doğrulaması içeren bir sürümle güncelleyeceğimi düşündüm (ekran görüntüsünde taahhütten hemen sonra macenta harf). Bayrağın kısa bir açıklaması:

% G ?: iyi (geçerli) bir imza için "G", kötü bir imza için "B", bilinmeyen geçerliliği olan iyi bir imza için "U" ve imza olmadan "N" gösterir

Diğer değişiklikler şunları içerir:

  • Çıktı tty'den başka bir şeye aitse renkler kaldırılır (bu da grepping için yararlıdır)
  • git log -g şimdi reflog seçiciyi içeriyor.
  • Refnames'e 2 paren kaydedin ve sonuna koyun (sütun hizalamasını korumak için)
  • Çok uzunsa göreli tarihleri ​​kısaltın (ör. 3 years, 4..)
  • Komiser adlarını kısaltın (bazı ppl'ler için biraz kısa olabilir, sadece komiter adlarını kısaltmak %<(7,trunc)için git .mailmap özelliğini değiştirin veya kontrol edin )

İşte yapılandırma:

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

Sonuçta sütun hizalaması, bazı (umarım) işe yaramaz karakterler pahasına çok daha iyi korunur. Herhangi bir iyileştirmeniz varsa, mesaj rengini bir taahhüdün imzalanıp imzalanmadığına bağlı olarak yapmaktan çekinmeyin, ancak bu mümkün görünmüyor atm.

Ekran görüntüsü

Git log'un ekran görüntüsü


3
Bir posta haritası kullanarak hatları daha da kısaltabilirsiniz . İşyerindeki meslektaşların isimlerini sadece ilk isimlerine
kısalttım

2
--Pretty formatındaki cevaplar iyidir ve tigcevap gerekli konfigürasyon olmadan etkileşim sağlar, ancak bu mükemmeldir - standart 'git log' komutunu kullanarak istenen tek satırlık çıktıyı (önyükleme rengiyle!) Verir. Çok hoş.
Brent Faust

--Right-left kullanırken, > <artık işaretleri almıyorum . %mBiçime ekleme denendi , ancak >normalde bile her seferinde görünür git log. İşaretlerin formatla normal şekilde nasıl davranacağına dair ipuçları var mı?
16'da Vituel


2
@ TrầnViệtHoàng --onelinesadece bir takma addır --pretty=oneline. format.prettyvarsayılan güzel biçimdir, ancak format.onelineafaik'i geçersiz kılmanın bir yolu yoktur . Ne yapacağım pretty = shortlogyapılandırma satırındaki atlamak ve daha sonra çalıştırmak için bir takma ad yapmaktır git log --pretty=shortlog.
andsens

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

--date=tarih biçimi ayarlamak için kullanın

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

1
Harika! Bir dahaki sefere hash insan gözlerim için saçmalık olduğundan muhtemelen% h yerine% h kullanacağım :)
Jesper Rønn-Jensen

nasıl istersen. sadece basit bir örnek verdim;)
knittl

2
Güzel! Ben --date = kısa
Jesper Rønn-Jensen

3
Sadece oraya atmak (8 yıl geç): karma saçmalık gibi görünebilir, ancak taahhütleri şifrelemek veya karşılaştırmak istiyorsanız yararlı bir araçtır. Genellikle
hash'ı

81

Bunu kullanmaktan çekinmeyin:

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

Not -7sadece son 7 girdileri göstermek için, sonunda.

Bak:

resim açıklamasını buraya girin


3
--date=shortkısaltmak için eklenebilir.
xuhdev

@Hannes, Şube isimleri nerede?
Pacerier

@Pacerier git logher zaman o anda teslim alınmış dalın geçmişini gösterir.
Hannes Schneidermayer

%d"Ref adlarını" geri yüklemek için ekleyin (HEAD -> master).
2540625

Neden kullanmak resetyerine auto?
2540625

49

tig , büyük açık kaynak * nix dağıtımlarında bulunan git log komutunu kullanmanın olası bir alternatifidir .

Açık debian veya ubuntu yükleme ve aşağıdaki gibi çalıştırmayı deneyin:

$ sudo apt-get install tig

(tig kurulur)

$ tig

(günlük, çağrı cihazında aşağıdaki gibi görüntülenir ve geçerli işlemin karması altta görüntülenir)

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%)

Markdown metin renklendirmeyi desteklemediğinden hayal edin: sütun 1: mavi; sütun 2: yeşil; sütun 3: varsayılan metin rengi. Son satır vurgulanır. Hit Q veya q çıkmak için.


tigBir ascii sekmesinin (% x09) garanti etmediği düzensiz kenarları olmayan sütunları haklı çıkarır .

Bir İçin kısa tarih biçimi isabet sermaye D (not: küçük d bir fark görüntüsünü açar.) Yapılandır kalıcı ekleyerek show-date = shortiçin ~ / .tigrc; veya [tig].git / configure veya ~ / .gitconfig dosyalarındaki bir bölümde.

Tüm bir değişikliği görmek için :

  • vurmak girin . Pencerenin alt yarısında bir alt bölme açılır.
  • kullanmak k , j alt bölmesinde değişiklik kaydırmak için anahtarları.
  • aynı zamanda, taahhüdden yürütmeye geçmek için yukarı , aşağı tuşlarını kullanın.

Tig git'ten ayrı ve görünüşte * nix'e özgü olduğundan, muhtemelen pencerelere cygwin yüklemesini gerektirir. Ama için fötr yüklerim komutlar olduğuna inanıyoruz $ su, (enter root password), # yum install tig. İçin freebsd denemede % su, (enter root password), # pkg_add -r tig.


Bu arada, tig günlüğün hızlı bir görünümünden çok daha fazlası için iyidir: Screenshots & Manual


lütfen tam bir örnek veriniz. Konsolumda yazmak tigbana bir hata veriyor-bash: tig: command not found
Jesper Rønn-Jensen

10
vay. Bu araç harika ve şaşırtıcı derecede hızlı! demlemek tig yükleyin
boğa güreşi

mac kullanıyorsanız, demlemek tig yükleyin
Pedro Brasileiro

1
, Windows, babun kullanıcıları olabilirpact install tig
obojdi

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

veya

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

... cdunn2001'in yukarıdaki cevabına dayanarak: Yazarın e = postasını kaybeder ve sadece yazarın adını, Jesper ve knittl'e göre, ancak okuma kolaylığı için sabit genişlikli sütunlarda çıktıyı koruma fikrine uygun olarak ( iyi fikir!). Ancak yazar adı için ayrı bir sola yaslanmış sütun yerine, bu bayrağı komutun sonunda bir parantez ile sararım veya bir boru ile kaydırırım. (Çıktıyı okurken görsel bir yardımcı olarak hizmet eden herhangi bir karakter olabilir ... yine de çıktıyı bir dizin veya başka bir şeyle karıştırmayı azaltmak için eğik çizgileri önlemek için mantıklı olabilir.)

Örnek çıktı:

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

Önceden tanımlanmış git takma adını kullanın, yani:

$ git work

Komut ile bir kez oluşturuldu:

$ 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

Veya grafikle daha renkli:

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

resim açıklamasını buraya girin


Evet, bunu beğendim!
Alex

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

Sonuç:

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

Sabit genişlikli şeyler ilk sırada. En az önemli olan - e-posta alanı - son ve filtreleme kolaydır.


4

Sahnelemeye hazır olduğum taahhütleri göstermek için

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

Çıktı şöyle görünür:

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

İlk sütunun sarı renkte göründüğü ve parentezdeki 'H' 'm' ve 't' HEAD, master ve trunku gösterir ve her zamanki "--decorate" renklerinde görünür

Burada satır sonları var, böylece ne yaptığını görebilirsiniz:

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}'

Ben ile "aşamalı" takma:

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}"'

(Bundan kaçmanın daha kolay bir yolu var mı? Kaçmak için neyin gerekli olduğunu bulmak biraz zor oldu)


Bu komut dosyasının şu anki sürümü ~ 300LOC ve çok daha fazlasını yapıyor: ¶ - oneline / çok satırlı yürütme mesajını değiştirme seçeneği¶ - satır boşluğunu / satırını oneline modunda gösterir. örneğin: ¶ - aralığı param ile belirtin¶ - Vurgulama # 's¶ - vurgula / ^ - (Düzelt | Ekle | Refactor) / taahhüt mesajlarında¶
Sam Hasler

Otomatik sağlam takma ad alıntılama için bu yanıta bakın . ~ 300LOC ürününüzü bir özette paylaşmak ister misiniz?
Tom Hale

Teşekkürler Tom! Eğer o senaryoyu yayınlamaya başlarsam (gizli / şirkete özgü bazı şeyleri kaldırmam gerekir) burada ping yapacağım.
Sam Hasler

1

Yukarıda belirtilen tüm öneriler %skonu için yer tutucu kullanır . Ben kullanımına tavsiye edeceğiz %Bçünkü %sbiçimlendirme yeni hatlar reçel ve çoklu çizgiler mesajı ezilmiş görünür işlemek.

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

0

Bunu proje klasöründe çalıştırın:

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

İsterseniz bu satırı ~ / .gitconfig dosyanıza ekleyin:

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

0

Git log'u deneyin --pretty = daha dolgun, size şunu gösterecektir: - Yazar: Yazar Tarih: Teslim: Teslim Tarihi:

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.