Die kürzestmögliche Ausgabe aus dem Git-Protokoll mit Autor und Datum


465

Wie kann ich eine Git-Protokollausgabe mit (mindestens) diesen Informationen anzeigen:

* author
* commit date
* change

Ich möchte, dass es auf eine Zeile pro Protokolleintrag komprimiert wird. Was ist das kürzestmögliche Format dafür?

(versucht, --format=onelineaber das zeigt nicht das Datum)


2
Vielleicht gefällt Ihnen meine farbige Version: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Antworten:


699

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

hat den Job gemacht. Dies gibt aus:

  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

Inspiriert von der Stackoverflow-Frage: "Git-Log-Ausgabe wie svn ls -v" fand ich heraus, dass ich genau die Parameter hinzufügen konnte, die ich brauchte.

Um das Datum zu verkürzen (ohne die Uhrzeit anzuzeigen), verwenden Sie --date=short

Falls Sie neugierig waren, was die verschiedenen Optionen waren:
%h= abgekürzter Commit-Hash
%x09= Tab (Zeichen für Code 9)
%an= Autorenname
%ad= Autorendatum (Format respektiert - Datum = Option)
%s= Betreff
Von kernel.org/pub/software/scm /git/docs/git-log.html (Abschnitt PRETTY FORMATS) nach Kommentar von Vivek.


6
... und es ist auch nützlich hinzuzufügen, date=shortwie cdunn2001 in einer anderen Antwort vorschlägt
Jesper Rønn-Jensen

10
Mein bevorzugter (kurzer) Oneliner ist jetzt, das Datum vor dem Autor zu tauschen und das kurze Datum zu verwenden:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen

143
Würzen Sie es mit Farbe und zeigen Sie auch refs:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan

16
Spalte mit fester Breite: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 法轮功 冠状 冠状 六四 六四 27

15
Falls Sie neugierig waren, welche verschiedenen Optionen verfügbar waren:% h = abgekürzter Commit-Hash,% x09 = Tab (Zeichen für Code 9),% an = Autorenname,% ad = Autorendatum (Format respektiert - Datum = Option), % s = Betreff. Von kernel.org/pub/software/scm/git/docs/git-log.html (Abschnitt PRETTY FORMATS)
Vivek

204

Ich verwende diese beiden .gitconfig-Einstellungen:

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

% ad ist das Autorendatum, das durch --dateoder die in der Zeilengruppe [log] in .gitconfig angegebene Option überschrieben werden kann. Ich mag das relative Datum, weil es ein unmittelbares Gefühl dafür gibt, wann etwas begangen wurde. Die Ausgabe sieht folgendermaßen aus:

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

Dies ist natürlich alles in Farbe, so dass es einfach ist, die verschiedenen Teile einer Protokollzeile zu unterscheiden. git logAufgrund des Abschnitts [Format] ist dies auch die Standardeinstellung bei der Eingabe .

2014 UPDATE: Da Git jetzt das Auffüllen unterstützt, habe ich eine nette Änderung der obigen Version:

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

Diese rechte Seite richtet die relativen Daten aus und die linke Seite richtet die Namen der Committer aus, was bedeutet, dass Sie ein spaltenartiges Aussehen erhalten, das die Augen schont.

Bildschirmfoto

  ss # 1

UPDATE 2016: Da das Signieren von GPG-Commits zu einer Sache wird, dachte ich, ich würde diesen Beitrag mit einer Version aktualisieren, die eine Signaturüberprüfung enthält (im Screenshot ist es der Magenta-Buchstabe direkt nach dem Commit). Eine kurze Erklärung der Flagge:

% G?: Zeigen Sie "G" für eine gute (gültige) Signatur, "B" für eine schlechte Signatur, "U" für eine gute Signatur mit unbekannter Gültigkeit und "N" für keine Signatur

Weitere Änderungen sind:

  • Farben werden jetzt entfernt, wenn die Ausgabe nicht auf tty erfolgt (was zum Greppen usw. nützlich ist).
  • git log -g Enthält jetzt den Reflog-Selektor.
  • Speichern Sie 2 Parens auf Refnames und setzen Sie sie am Ende (um die Spaltenausrichtung beizubehalten)
  • Kürzen relative Daten , wenn sie zu lang sind (zB 3 years, 4..)
  • Abschneiden von Commiternamen (kann für einige Benutzer etwas kurz sein, ändern Sie einfach die Funktion %<(7,trunc)oder überprüfen Sie die git .mailmap-Funktion , um Commiternamen zu verkürzen).

Hier ist die Konfiguration:

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

Alles in allem bleibt die Spaltenausrichtung jetzt viel besser auf Kosten einiger (hoffentlich) nutzloser Zeichen erhalten. Fühlen Sie sich frei zu bearbeiten, wenn Sie irgendwelche Verbesserungen haben. Ich würde gerne die Farbe der Nachricht davon abhängen lassen, ob ein Commit signiert ist, aber es scheint nicht möglich zu sein, atm.

Bildschirmfoto

Screenshot des Git-Protokolls


3
Sie können die Zeilen mithilfe einer Mailmap noch weiter verkürzen . Ich habe die Namen der Kollegen an meinem Arbeitsplatz nur auf ihren Vornamen
abgekürzt

2
Die Antworten im --pretty-Format sind gut und die tigAntwort bietet Interaktivität ohne erforderliche Konfiguration, aber diese ist brillant - sie liefert die angeforderte einzeilige Ausgabe (mit Farbe zum Booten!) Mit dem Standardbefehl 'git log'. Sehr schön.
Brent Faust

Bei Verwendung von --right-left bekomme ich keine > <Markierungen mehr. Versucht, %mzum Format hinzuzufügen , wird dann >aber jedes Mal angezeigt, auch für einen normalen git log. Gibt es Hinweise, wie sich Markierungen im Format normal verhalten?
Vituel

1
@ AlvaroCavalcanti sicher kein Problem! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ TrầnViệtHoàng --onelineist nur ein Alias ​​für --pretty=oneline. format.prettyist das standardmäßige hübsche Format, aber es gibt keine Möglichkeit, format.onelineafaik zu überschreiben . Ich würde die pretty = shortlogZeile in der Konfiguration weglassen und dann einen Alias ​​für die Ausführung erstellen git log --pretty=shortlog.
andsens

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

Verwenden Sie --date=diese Option, um ein Datumsformat festzulegen

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

1
Großartig! Das nächste Mal werde ich wahrscheinlich nur% h über% H verwenden, da der Hash nur Unsinn für meine menschlichen Augen ist :)
Jesper Rønn-Jensen

wie du möchtest. Ich habe nur ein einfaches Beispiel gegeben;)
Knittl

2
Cool! Mir war nicht bekannt --date = short
Jesper Rønn-Jensen

3
Wirf das einfach raus (8 Jahre zu spät): Der Hash mag wie Unsinn aussehen, aber es ist ein nützliches Werkzeug, wenn du die Commits auswählen oder vergleichen willst. Oft listen Sie den Hash nicht auf, weil er Bedeutung hat, sondern weil er Verwendung hat
stevendesu

81

Fühlen Sie sich frei, dieses zu verwenden:

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

Beachten Sie das -7am Ende, um nur die letzten 7 Einträge anzuzeigen.

Aussehen:

Geben Sie hier die Bildbeschreibung ein


3
--date=shortkann hinzugefügt werden, um es kürzer zu machen.
Xuhdev

@Hannes, wo sind die Filialnamen?
Pacerier

@Pacerier git logzeigt immer den Verlauf des aktuell ausgecheckten Zweigs an.
Hannes Schneidermayer

Hinzufügen %d, um "ref Namen" wie wiederherzustellen (HEAD -> master).
2540625

Warum resetstatt verwenden auto?
2540625

49

tig ist eine mögliche Alternative zur Verwendung des Befehls git log , der auf den wichtigsten Open Source * nix-Distributionen verfügbar ist.

Versuchen Sie unter Debian oder Ubuntu Folgendes zu installieren und auszuführen :

$ sudo apt-get install tig

(WIG wird installiert)

$ tig

(Das Protokoll wird im Pager wie folgt angezeigt, wobei der Hash des aktuellen Commits unten angezeigt wird.)

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

Stellen Sie sich Folgendes vor: Spalte 1: blau; Spalte 2: grün; Spalte 3: Standardtextfarbe. Letzte Zeile hervorgehoben. Drücken Sie Q oder q, um den Vorgang zu beenden.


tigRichtet die Spalten ohne ausgefranste Kanten aus , was eine ASCII-Registerkarte (% x09) nicht garantiert.

Für ein kurzes Datumsformat drücken Sie Großbuchstaben D (Hinweis: Kleinbuchstabe d öffnet eine Diff-Ansicht.) Konfigurieren Sie sie dauerhaft, indem Sie show-date = shortzu ~ / .tigrc hinzufügen. oder in einem [tig]Abschnitt in .git / configure oder ~ / .gitconfig.

So sehen Sie eine vollständige Änderung :

  • Drücken Sie die Eingabetaste . In der unteren Hälfte des Fensters wird ein Unterfenster geöffnet.
  • Verwenden Sie die Tasten k , j , um durch die Änderung im Unterfenster zu scrollen.
  • Verwenden Sie gleichzeitig die Aufwärts- und Abwärts- Tasten, um von Commit zu Commit zu wechseln.

Da tig von git getrennt und anscheinend * nix-spezifisch ist, muss Cygwin wahrscheinlich unter Windows installiert werden. Aber für fedora glaube ich , dass die Installationsbefehle sind $ su, (enter root password), # yum install tig. Für freebsd Versuch % su, (enter root password), # pkg_add -r tig.


Tig ist übrigens viel mehr als nur eine schnelle Ansicht des Protokolls: Screenshots & Handbuch


Bitte geben Sie ein vollständiges Beispiel an. Das Schreiben tigin meine Konsole gibt mir einfach einen Fehler-bash: tig: command not found
Jesper Rønn-Jensen

10
Beeindruckend. Dieses Tool ist fantastisch und überraschend schnell! Brew Install Tig
Stierkampf

Wenn Sie Mac verwenden, brauen Sie installieren tig
Pedro Brasileiro

1
unter Windows können babun Benutzerpact install tig
obojdi

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

oder

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

... Riffing zu der obigen Antwort von cdunn2001: Ich würde die E-Mail des Autors verlieren und nur den Namen des Autors gemäß Jesper und knittl angeben, aber im Einklang mit der Idee von cdunn2001, die Ausgabe in Spalten konstanter Breite zu halten, um das Lesen zu erleichtern ( großartige Idee!). Anstelle einer separaten linksbündigen Spalte für den Autorennamen umschließe ich dieses Flag am Ende des Befehls jedoch mit Klammern oder versetze es mit einer Pipe. (Könnte wirklich jedes Zeichen sein, das als visuelle Hilfe beim Lesen der Ausgabe dient ... obwohl es möglicherweise sinnvoll ist, Schrägstriche vor oder zurück zu vermeiden, um die Verwechslung der Ausgabe mit einem Verzeichnis oder etwas anderem zu verringern.)

Beispielausgabe:

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

Verwenden Sie einen vordefinierten Git-Alias, dh:

$ git work

Einmal erstellt durch Befehl:

$ 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

Oder mehr mit Grafik gefärbt:

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

Geben Sie hier die Bildbeschreibung ein


Ja, ich mag diesen!
Alex

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

Ergebnis:

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

Zeug mit konstanter Breite steht an erster Stelle. Der am wenigsten wichtige Teil - die E-Mail-Domain - ist der letzte und einfach zu filternde.


4

Um die von mir inszenierten Commits zu zeigen, die bereit sind, Druck auszuüben, mache ich das

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

Die Ausgabe sieht ungefähr so ​​aus:

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

Wo die erste Spalte in Gelb erscheint und das 'H' 'm' und 't' in der Klammer den KOPF, den Master und den Kofferraum zeigen und in ihren üblichen "--decorate" -Farben erscheinen

Hier ist es mit Zeilenumbrüchen, damit Sie sehen können, was es tut:

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

Ich habe einen Alias ​​für "inszeniert" mit:

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

(Gibt es einen einfacheren Weg, dem zu entkommen? Es war etwas schwierig herauszufinden, was entkommen musste)


Meine aktuelle Version dieses Skripts ist ~ 300LOC und bietet noch viel mehr: ¶ - Option zum Umschalten der Online- / Mehrzeilen-Festschreibungsnachricht¶ - Zeilenweißzeichen anzeigen / Zeilenenden im Online-Modus. Beispiel: ¶ - Bereich über Parameter angeben - Problem # 's hervorheben - / ^ - (Fix | Add | Refactor) / in Commit-Nachrichten hervorheben¶
Sam Hasler

Informationen zum automatisierten Zitieren robuster Alias ​​finden Sie in dieser Antwort . Möchtest du dein ~ 300LOC in einem Kern teilen?
Tom Hale

Danke Tom! Wenn ich dazu komme, dieses Skript zu veröffentlichen (ich müsste einige vertrauliche / unternehmensspezifische Dinge entfernen), werde ich Sie hier anpingen.
Sam Hasler

1

Alle oben genannten Vorschläge verwenden %sPlatzhalter für das Thema. Ich empfehle die Verwendung, %Bda durch die %sFormatierung neue Zeilen erhalten bleiben und die Festschreibungsnachricht für mehrere Zeilen gequetscht angezeigt wird.

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

0

Führen Sie dies im Projektordner aus:

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

Und wenn Sie möchten, fügen Sie diese Zeile zu Ihrer ~ / .gitconfig hinzu:

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

0

Versuchen Sie es mit git log --pretty = fuller, es zeigt Ihnen: - Autor: Autor Datum: Commit: Commit Datum:

Hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.