Wie kann ich ein Git-Protokoll nur mit der ersten Zeile ausgeben?

330

Ich versuche, das Format für anzupassen git log. Ich möchte, dass alle Commits in einer Zeile angezeigt werden. Jede Zeile sollte nur die erste Zeile der Festschreibungsnachricht anzeigen.
Ich habe herausgefunden, dass git log --pretty=shortdies der Trick sein sollte, aber auf meinem Computer wird das vollständige Protokoll genauso git logangezeigt (außer dem Zeitstempel).

Außerdem habe ich versucht, die in der Manpage definierten Platzhalter zu verwenden . Ich konnte jedoch keinen Befehl zum Verkürzen der Protokollnachricht finden. Ich habe diese Zeile ausprobiert, git log --pretty=format:'%h : %s'die den kurzgeschlossenen Hash %hund die vollständige Nachricht %sin einer Zeile anzeigt .

Ich benutze git version 1.7.3.1.msysgit.0unter Vista.


Vielleicht hat es etwas damit zu tun, wie ich meine Commit-Nachrichten schreibe. Hier ist ein Beispiel:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Mit dem angegebenen Beispiel möchte ich nur eine Ausgabe vor Added some functionality.dem Shortend-Hash erhalten.

JJD
quelle
1
%sist der Betreff, nicht die vollständige Nachricht.
Josh Lee
Es ist wirklich schwer zu sagen, was Sie tatsächlich wollen. Das shortFormat ist jedoch nicht alles in einer Zeile (Überraschung!) oneline. Wenn onelineund %h : %snicht was Sie wollen, was ist mit ihnen los? Insbesondere %sist der Betreff die erste Zeile der Festschreibungsnachricht. Das sollte in der Tat eine verkürzte Version sein. Ist es möglich, dass Sie Commits mit einer einzigen langen Zeile für die Nachricht gemacht und diese irgendwie mit Zeilenumbruch angezeigt haben?
Cascabel
Du verstehst total. Das Problem ist , dass onelineund %snicht ausgeben , was wir erwarten, zumindest auf meinem Computer. Ich habe meinen Beitrag mit einem Beispiel für meine Commit-Nachricht aktualisiert. Vielleicht hilft es.
JJD

Antworten:

544

Hast du das versucht?

git log --pretty=oneline --abbrev-commit

Das Problem ist wahrscheinlich, dass nach der ersten Zeile eine leere Zeile fehlt. Der obige Befehl funktioniert normalerweise für mich, aber ich habe gerade ein Commit ohne leere zweite Zeile getestet. Ich habe das gleiche Ergebnis wie Sie: die ganze Nachricht in einer Zeile.

Die leere zweite Zeile ist ein Standard in Git-Commit-Nachrichten. Das angezeigte Verhalten wurde wahrscheinlich absichtlich implementiert.

Die erste Zeile einer Festschreibungsnachricht soll eine kurze Beschreibung sein. Wenn Sie es nicht in einer einzigen Zeile schaffen, können Sie mehrere verwenden, aber git betrachtet alles vor der ersten leeren Zeile als "Kurzbeschreibung". onelinedruckt die gesamte Kurzbeschreibung aus, also alle 3 Zeilen.

Gauthier
quelle
Vielen Dank! Sie haben das Rätsel gelöst: Ich habe nach der ersten Zeile in meiner Commit-Nachricht keine leere Zeile, um den Betreff vom Rest zu trennen. Trotzdem wäre es schön, wenn ich es ein- oder auslassen könnte.
JJD
1
Kein Problem. In der Tat ist es Ihnen frei, die leere Zeile zu haben oder nicht. Nur dass Ihre gesamte Nachricht zur Kurznachricht wird, wenn Sie sie weglassen. Ich mag diese kurze Beschreibung / detaillierte Beschreibung, und ich nehme an, dass es ein Problem war, für die kurze Beschreibung auf eine Zeile beschränkt zu sein, daher die Anforderung einer leeren Zeile. Sie könnten die Ausgabe immer git logan ein Filterskript weiterleiten, aber ich würde wirklich empfehlen, eine kurze Beschreibung mit einer leeren Zeile zu schreiben.
Gauthier
89
Es gibt auch git log --oneline --oneline ist eine integrierte Abkürzung für "--pretty = oneline --abbrev-commit", die zusammen verwendet wird.
Jeremy Logan
Wie werden Sie den vorangestellten verkürzten Hashtag los? Nicht, dass es nicht hübsch ist. Aber ohne cut. Das wäre awkWard ... (Übrigens Mathe F: Wie hoch ist die Wahrscheinlichkeit, dass das nächste Bit in einer ordnungsgemäß codierten Huffman-Sequenz auf Speicherebene ein- oder ausgeschaltet ist? Hinweis: Es ist === 50%.)
Phlip
7
das war es tx. Oh, außerdem habe ich eine Seite voller s, also habe ich natürlich eine %für hinzugefügt '%s'. C-;
Phlip
158

Macht git log --onelinewas du willst

9000
quelle
1
Ich möchte nicht, dass die gesamte Festschreibungsnachricht in einer Zeile zusammengeführt wird. Ich möchte nur die erste Zeile jeder Commit-Nachricht sehen.
JJD
41

Besseres und einfacheres Git-Protokoll durch Erstellen eines Alias . Fügen Sie den folgenden Code nur einmal für eine Sitzung in das Terminal ein. Fügen Sie den Code in das zshrc- oder bash-Profil ein, um ihn dauerhaft zu machen.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Ausgabe

git lg

Geänderte Zeilen ausgeben

git lg -p

Alternativ (empfohlen)
Fügen Sie diesen Code in die globale .gitconfig-Datei ein

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Weiterführende Literatur.
https://coderwall.com/p/euwpig/a-better-git-log
Erweiterte Lesung.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/

atilkan
quelle
Das Beispiel ist eine nette Demo im hübschen Format, aber "Fügen Sie den folgenden Code nur einmal in das Terminal ein" scheint falsch zu sein, da kein Alias ​​für "git lg" erstellt wird
Drone2537
Hinweis für andere: Wenn Sie diesen Befehl stapelweise ausführen, ersetzen Sie% durch %% und ersetzen Sie 'durch "". Ergebnis = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. Sie können -p an diese Fledermausdatei übergeben, um auch geänderte Zeilen zu erhalten
Dheeraj Bhaskar
30

Dadurch wird nur die Nachricht (nur Betreffzeile) ohne Hash ausgedruckt :

git log --pretty=format:%s
technophyle
quelle
3
%sfür das Thema; %bfür den Körper; %Bfür beide ("roher Körper" in git-scm.com/docs/pretty-formats )
Mathieu CAROFF
25

Sie können einen globalen Alias ​​definieren, um ein kurzes Protokoll auf bequemere Weise aufzurufen:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Dann können Sie es mit aufrufen git slog(es funktioniert sogar mit automatischer Vervollständigung, wenn Sie es aktiviert haben).

Dieser Brasilianer
quelle
8

Ohne Commit-Nachrichten nur der Hash:

git log --pretty=oneline | awk '{print $1}'
otiai10
quelle
7
Wenn Sie nur den Hash wollen ...git log --pretty=format:"%H"
michael_j_ward
Wenn Sie nur den Hash wollen, können Sie ihn auch verwenden git rev-list HEAD.
Fabio sagt Reinstate Monica
-8

Wenn Sie immer so verwenden möchten, git logkönnen Sie den Git-Alias ​​von hinzufügen

git config --global alias.log log --oneline

Danach git logwird gedruckt, was normalerweise von gedruckt wirdgit log --oneline

laut
quelle
12
Dies funktioniert nicht wirklich, weil (A. Git-Aliase eingebaute Befehlsnamen nicht überschreiben können) und (B. Es müssen Anführungszeichen stehen "log --oneline").
Max Nanasy