लेखक और दिनांक वाले गिट लॉग से सबसे कम संभव आउटपुट


465

मैं इस जानकारी के साथ कम से कम एक git लॉग आउटपुट कैसे दिखा सकता हूं:

* author
* commit date
* change

मैं चाहता हूं कि यह प्रति लॉग एंट्री के लिए एक पंक्ति में संकुचित हो। उसके लिए सबसे छोटा संभव प्रारूप क्या है?

(आजमाया गया --format=onelineलेकिन वह तारीख नहीं दिखाता)


2
हो सकता है कि आपको मेरा रंगीन संस्करण पसंद
आये

जवाबों:


699

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

काम किया। यह आउटपुट:

  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

स्टैकओवरफ़्लो प्रश्न से प्रेरित होकर : "git log आउटपुट जैसे svn ls -v" , मुझे पता चला कि मैं अपनी ज़रूरत के हिसाब से सटीक पैरामेट्स जोड़ सकता हूं।

तारीख को छोटा करने के लिए (समय नहीं दिखाते) उपयोग करें --date=short

मामले में आप उत्सुक क्या विभिन्न विकल्प थे:
%h= प्रतिबद्ध हैश संक्षिप्त
%x09= टैब (कोड 9 के लिए चरित्र)
%an= लेखक का नाम
%ad= लेखक की तिथि (प्रारूप सम्मान --date = विकल्प)
%s= विषय
से kernel.org/pub/software/scm विवेक की टिप्पणी के द्वारा /git/docs/git-log.html (PRETTY FORMATS अनुभाग)।


6
... और यह भी जोड़ने के लिए उपयोगी है date=shortcdunn2001 एक और जवाब में सुझाव देता है
जेस्पर रॉन-जेनसन

10
मेरा पसंदीदा (लघु) ऑन्लाइनर अब लेखक से पहले तारीख को स्वैप करने और छोटी तिथि का उपयोग करने के लिए है:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
जेस्पर रॉन-जेनन

143
इसे रंग के साथ स्पाइस करें और रेफरी भी दिखाएं:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
कीन

16
निश्चित चौड़ाई के स्तंभों की मेज: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
मामले में आप उत्सुक थे कि अलग-अलग विकल्प क्या थे:% h = संक्षिप्त प्रतिबद्ध हैश,% x09 = टैब (कोड 9 के लिए वर्ण),% a = लेखक का नाम,% विज्ञापन = लेखक दिनांक (प्रारूप का सम्मान --date = विकल्प), % s = विषय। से kernel.org/pub/software/scm/git/docs/git-log.html (सुंदर अनुभाग प्रारूप)
विवेक

204

मैं इन दो .gitconfig सेटिंग्स का उपयोग करता हूं:

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

% विज्ञापन लेखक की तारीख है, जिसे --date। लॉगऑन में। मैं सापेक्ष तिथि को पसंद करता हूं क्योंकि यह उस समय की तत्काल अनुभूति देता है जब सामान की कॉमेडी की जाती थी। आउटपुट इस तरह दिखता है:

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

यह सभी निश्चित रूप से रंग में है, इसलिए लॉग लाइन के विभिन्न हिस्सों को अलग करना आसान है। git log[प्रारूप] अनुभाग के कारण टाइप करते समय भी यह डिफ़ॉल्ट है ।

2014 अद्यतन: चूंकि अब git पैडिंग का समर्थन करता है, मेरे पास उपरोक्त संस्करण के लिए एक अच्छा संशोधन है:

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

यह दायां सापेक्ष तिथियों को संरेखित करता है और बाएं संरेखित नाम संरेखित करता है, जिसका अर्थ है कि आप एक स्तंभ जैसा दिखते हैं जो आंखों पर आसान है।

स्क्रीनशॉट

  एस एस # 1

२०१६ अद्यतन: चूंकि जीपीजी कमिटमेंट साइनिंग एक चीज बन रही है, मैंने सोचा कि मैं इस पोस्ट को एक संस्करण के साथ अपडेट करूंगा जिसमें हस्ताक्षर सत्यापन भी शामिल है (स्क्रीनशॉट में यह कमेंट के बाद मजेंटा लेटर है)। ध्वज का संक्षिप्त विवरण:

% G ?: एक अच्छे (वैध) हस्ताक्षर के लिए "G", एक बुरे हस्ताक्षर के लिए "B", अज्ञात वैधता वाले एक अच्छे हस्ताक्षर के लिए "U" और बिना हस्ताक्षर के "N"

अन्य परिवर्तनों में शामिल हैं:

  • रंगों को अब हटा दिया जाता है यदि आउटपुट ट्टी के अलावा कुछ और है (जो कि ग्रेपिंग आदि के लिए उपयोगी है)
  • git log -g अब इसमें reflog selector शामिल है।
  • 2 परिजनों को बचाने पर सहेजें और उन्हें अंत में रखें (कॉलम संरेखण को संरक्षित करने के लिए)
  • यदि वे बहुत लंबे हैं (जैसे 3 years, 4..)
  • कम्यूटेटर नाम (कुछ पीपीएल के लिए थोड़ा छोटा हो सकता है, बस कमिट%<(7,trunc) कर सकते हैं या कमिट कर सकते हैं। कमिट नाम को छोटा करने के लिए .mailmap फीचर देखें )

यहाँ विन्यास है:

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

सभी सभी कॉलम संरेखण में अब कुछ (उम्मीद है) बेकार पात्रों की कीमत पर बहुत बेहतर संरक्षित है। यदि आपको कोई सुधार करना है, तो संपादित करने के लिए स्वतंत्र महसूस करें, मैं संदेश का रंग इस बात पर निर्भर करना पसंद करूंगा कि क्या कोई हस्ताक्षर किया गया है, लेकिन ऐसा नहीं लगता कि यह संभव है।

स्क्रीनशॉट

गिट लॉग का स्क्रीनशॉट


3
आप एक मेलमैप का उपयोग करके लाइनों को और भी छोटा कर सकते हैं । मैंने अपने कार्यस्थल पर सहकर्मियों के नाम को केवल उनके पहले नाम के नीचे संक्षिप्त कर दिया है :-)
और

2
- व्याख्यात्मक प्रारूप उत्तर अच्छे हैं, और tigउत्तर बिना किसी आवश्यक कॉन्फ़िगरेशन के साथ अन्तरक्रियाशीलता देता है, लेकिन यह शानदार है - यह मानक 'गिट लॉग' कमांड का उपयोग करके अनुरोधित एक-लाइन आउटपुट (रंग से बूट तक!) देता है। बहुत अच्छा।
ब्रेंट फौस्ट

उपयोग करते समय - ठीक-बाएं, मुझे > <अब निशान नहीं मिलते हैं। %mप्रारूप में जोड़ने की कोशिश की , लेकिन फिर >भी हर बार दिखाई देता है, यहां तक ​​कि एक सामान्य के लिए भी git log। कोई भी संकेत कैसे प्रारूप के साथ सामान्य व्यवहार है?
विटुएल

1
@AlvaroCavalcanti सुनिश्चित करें कि कोई समस्या नहीं है! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ Tr @nViệtHoàng --onelineकेवल एक उपनाम है --pretty=onelineformat.prettyडिफ़ॉल्ट सुंदर प्रारूप है, लेकिन format.onelineafaik को ओवरराइड करने का कोई तरीका नहीं है । मैं क्या करूँगी pretty = shortlogलाइन को कॉन्फ़िगर में छोड़ दिया गया है और फिर चलाने के लिए एक उपनाम बनाया गया है git log --pretty=shortlog
सेंस

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

--date=दिनांक प्रारूप सेट करने के लिए उपयोग करें

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

1
महान! अगली बार मैं शायद केवल% h का% H से अधिक उपयोग करूँगा क्योंकि हैश मेरी मानव आँखों के लिए सिर्फ बकवास है :)
जेस्पर रॉन-जेनसेन

जैसा आप चाहें। मैंने केवल एक साधारण उदाहरण दिया;)
knittl

2
ठंडा! मुझे इसके बारे में पता नहीं था -डेट = लघु
-जेनसेन

3
बस इसे वहाँ फेंक (8 साल देर): हैश बकवास की तरह लग सकता है, लेकिन यह एक उपयोगी उपकरण है अगर आप चेरी को कमिट करना चाहते थे या तुलना करना चाहते थे। अक्सर आप हैश को सूचीबद्ध नहीं करते हैं क्योंकि इसका अर्थ होता है, लेकिन क्योंकि इसका उपयोग है
stevendesu

81

इस एक का उपयोग करने के लिए स्वतंत्र महसूस करें:

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

-7केवल अंतिम 7 प्रविष्टियों को दिखाने के लिए, अंत में ध्यान दें ।

देखो:

यहाँ छवि विवरण दर्ज करें


3
--date=shortइसे छोटा करने के लिए जोड़ा जा सकता है।
xuhdev

@ हाय, शाखा के नाम कहाँ हैं?
पेसियर

@ स्पेसर git logहमेशा वर्तमान में चेक आउट शाखा के इतिहास को दर्शाता है।
हेंसस श्नीडेमेयर

%dजैसे "रेफरी नाम" को पुनर्स्थापित करने के लिए जोड़ें (HEAD -> master)
2540625

के resetबजाय का उपयोग क्यों करें auto?
2540625

49

tig git लॉग कमांड का उपयोग करने का एक संभावित विकल्प है , जो प्रमुख ओपन सोर्स * nix वितरण पर उपलब्ध है।

डेबियन या ubuntu पर स्थापित करने और चलाने की कोशिश निम्नानुसार है:

$ sudo apt-get install tig

(बाघ स्थापित हो जाता है)

$ tig

(लॉग पेजर में निम्नानुसार प्रदर्शित किया जाता है, जिसमें वर्तमान कमिट का हैश नीचे प्रदर्शित होता है)

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

चूंकि मार्कडाउन टेक्स्ट कलरिंग का समर्थन नहीं करता है, कल्पना करें: कॉलम 1: नीला; स्तंभ 2: हरा; कॉलम 3: डिफ़ॉल्ट टेक्स्ट रंग। अंतिम पंक्ति, हाइलाइट की गई। बाहर निकलने के लिए Q या q को हिट करें।


tigदांतेदार किनारों के बिना कॉलम को औचित्य देता है , जो एक एससीआई टैब (% x09) गारंटी नहीं देता है।

एक के लिए लघु दिनांक स्वरूप हिट राजधानी डी (ध्यान दें: लोअरकेस एक diff दृश्य खोलता है।) यह कॉन्फ़िगर स्थायी रूप से जोड़कर show-date = shortकरने के लिए ~ / .tigrc; या एक [tig]अनुभाग में .git / / कॉन्फ़िगर या ~ / .gitconfig।

संपूर्ण परिवर्तन देखने के लिए :

  • हिट दर्ज करें । विंडो के निचले आधे हिस्से में एक उप फलक खुलेगा।
  • उप फलक में परिवर्तन को स्क्रॉल करने के लिए k , j कुंजियों का उपयोग करें।
  • एक ही समय में, ऊपर से नीचे कुंजियों का उपयोग करें ।

चूंकि टिगिट गिट से अलग है और जाहिरा तौर पर * निक्स विशिष्ट है, इसलिए इसे संभवतः विंडोज़ पर स्थापित करने के लिए साइबरविन की आवश्यकता होती है। लेकिन के लिए फेडोरा मेरा मानना है कि स्थापित आदेशों हैं $ su, (enter root password), # yum install tig। के लिए FreeBSD कोशिश % su, (enter root password), # pkg_add -r tig


वैसे, बाघ लॉग के एक त्वरित दृश्य से बहुत अधिक के लिए अच्छा है: स्क्रीनशॉट और मैनुअल


कृपया पूरा उदाहरण दें। tigमेरे सांत्वना में लिखने से बस मुझे एक त्रुटि मिलती है-bash: tig: command not found
जेस्पर रॉन-जेनसन

10
वाह। यह उपकरण शानदार है, और आश्चर्यजनक रूप से तेज़ है! शराब की भठ्ठी स्थापित बाघ
बुल फाइट

अगर आप मैक का उपयोग करते हैं, तो काढ़ा स्थापित करें
पेड्रो ब्रासीलेरो

1
विंडोज पर, babun उपयोगकर्ताओं कर सकते हैंpact install tig
obojdi

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

या

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

... ऊपर cdunn2001 के उत्तर पर रिफ़रिंग: मैं लेखक का e = मेल खो दूंगा और इसमें केवल लेखक का नाम शामिल करूँगा, जैसा कि Jessper और knittl के अनुसार है, लेकिन cdunn2001 को पढ़ने में आसानी के लिए निरंतर चौड़ाई के कॉलम में आउटपुट बनाए रखने के विचार के साथ ( महान विचार!)। हालांकि, लेखक के नाम के लिए एक अलग बायां न्यायोचित कॉलम है, लेकिन मैं उस ध्वज को कमांड के अंत में एक कोष्ठक के साथ लपेटता हूं या इसे पाइप से ऑफसेट करता हूं। (वास्तव में कोई भी चरित्र हो सकता है जो आउटपुट को पढ़ने में एक दृश्य सहायता के रूप में कार्य करता है ... यद्यपि एक निर्देशिका या कुछ के साथ आउटपुट को भ्रमित करने के लिए अल्बाइट वापस या आगे के स्लैश से बचने के लिए समझ में आता है।)

नमूना उत्पादन:

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

पूर्वनिर्धारित git उपनाम का उपयोग करें, अर्थात:

$ git work

एक बार आदेश द्वारा बनाया गया:

$ 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

या ग्राफ के साथ अधिक रंगीन:

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

यहाँ छवि विवरण दर्ज करें


हाँ, मुझे यह पसंद है!
एलेक्स

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

परिणाम:

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

लगातार-चौड़ाई का सामान पहले है। कम से कम महत्वपूर्ण हिस्सा - ईमेल डोमेन - अंतिम और फ़िल्टर करने में आसान है।


4

उन कमिट्स को दिखाने के लिए मैंने मंचन किया है जो मुझे धक्का देने के लिए तैयार हैं

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

आउटपुट कुछ इस तरह दिखता है:

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

जहां पहला कॉलम पीले रंग में दिखाई देता है, और पितृत्व में 'H' 'm' और 't' HEAD, मास्टर और ट्रंक दिखाते हैं और अपने सामान्य "--decorate" रंगों में दिखाई देते हैं

यहाँ यह लाइन ब्रेक के साथ है ताकि आप देख सकें कि यह क्या कर रहा है:

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

मैंने इसके साथ "मंचन" किया है:

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

(क्या इससे बचने का एक आसान तरीका है? भागने के लिए काम करना थोड़ा मुश्किल था)


इस लिपि का मेरा वर्तमान संस्करण ~ 300LOC है और बहुत कुछ: / - ऑनलाइन / मल्टीलाइन कमिट मैसेज टॉगल करने का विकल्प - शो लाइन व्हॉट्सएप / लाइन ऑनलाइन मोड में समाप्त होता है। उदाहरण: ¶ - पैरामो के माध्यम से सीमा निर्दिष्ट करें - हाइलाइट समस्या # 's highlight - हाइलाइट / ^ - (फिक्स | एड | रिफ्लेक्टर) / कमिट मेसेज में
सैम हस्लर

स्वचालित मजबूत उपनाम के लिए, यह उत्तर देखें । एक जिस्ट में अपने ~ 300LOC को साझा करने की देखभाल?
टॉम हेल

धन्यवाद टॉम! यदि मुझे उस स्क्रिप्ट को पोस्ट करने का समय मिलता है (मुझे कुछ गोपनीय / कंपनी विशिष्ट सामान निकालने की आवश्यकता होगी) मैं आपको यहाँ पिंग करूँगा।
सैम हसलर

1

सभी उपर्युक्त सुझाव %sविषय के लिए प्लेसहोल्डर का उपयोग करते हैं। मैं उपयोग करने की सलाह दूंगा %Bक्योंकि %sस्वरूपण नई लाइनों को संरक्षित करता है और कई लाइनें प्रतिबद्ध संदेश स्क्वैश दिखाई देता है।

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

0

प्रोजेक्ट फ़ोल्डर में इसे चलाएं:

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

और यदि आप चाहें, तो इस लाइन को अपने ~ / .itconfig में जोड़ें:

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

0

Git log --pretty = fuller आज़माएँ, यह आपको दिखाएगा: - लेखक: लेखक तिथि: प्रतिबद्ध: प्रतिबद्ध दिनांक:

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.