Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
-
2.52.0
2025-11-17
- 2.51.2 keine Änderungen
-
2.51.1
2025-10-15
-
2.51.0
2025-08-18
- 2.50.1 keine Änderungen
-
2.50.0
2025-06-16
- 2.49.1 keine Änderungen
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 keine Änderungen
-
2.48.0
2025-01-10
- 2.45.1 → 2.47.3 keine Änderungen
-
2.45.0
2024-04-29
- 2.43.3 → 2.44.4 keine Änderungen
-
2.43.2
2024-02-13
- 2.43.1 keine Änderungen
-
2.43.0
2023-11-20
- 2.42.1 → 2.42.4 keine Änderungen
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 keine Änderungen
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 keine Änderungen
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 keine Änderungen
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 keine Änderungen
-
2.38.0
2022-10-02
- 2.37.1 → 2.37.7 keine Änderungen
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 keine Änderungen
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 keine Änderungen
-
2.35.0
2022-01-24
- 2.33.3 → 2.34.8 keine Änderungen
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 keine Änderungen
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 keine Änderungen
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 keine Änderungen
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 keine Änderungen
-
2.29.0
2020-10-19
- 2.28.1 keine Änderungen
-
2.28.0
2020-07-27
- 2.27.1 keine Änderungen
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 keine Änderungen
-
2.26.0
2020-03-22
- 2.25.1 → 2.25.5 keine Änderungen
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 keine Änderungen
-
2.24.0
2019-11-04
- 2.23.1 → 2.23.4 keine Änderungen
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 keine Änderungen
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 keine Änderungen
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 keine Änderungen
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 keine Änderungen
-
2.19.2
2018-11-21
- 2.17.1 → 2.19.1 keine Änderungen
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
BESCHREIBUNG
Listet Commits auf, die durch Folgen der parent-Links von den angegebenen Commits erreichbar sind, schließt aber Commits aus, die von den mit einem ^ davor angegebenen Commits erreichbar sind. Die Ausgabe erfolgt standardmäßig in umgekehrt chronologischer Reihenfolge.
Sie können dies als Mengenoperation betrachten. Die von einem der auf der Kommandozeile angegebenen Commits erreichbaren Commits bilden eine Menge, und dann werden die von einem der mit ^ davor angegebenen Commits erreichbaren Commits von dieser Menge subtrahiert. Die verbleibenden Commits sind das Ergebnis der Ausgabe des Befehls. Verschiedene andere Optionen und Pfadparameter können verwendet werden, um das Ergebnis weiter einzuschränken.
Daher bedeutet der folgende Befehl
$ git rev-list foo bar ^baz
"liste alle Commits auf, die von foo oder bar erreichbar sind, aber nicht von baz".
Eine spezielle Notation "<commit1>..<commit2>" kann als Kurzform für "^<commit1> <commit2>" verwendet werden. Zum Beispiel können die folgenden beiden Befehle austauschbar verwendet werden
$ git rev-list origin..HEAD $ git rev-list HEAD ^origin
Eine weitere spezielle Notation ist "<commit1>...<commit2>", die für Merges nützlich ist. Die resultierende Menge von Commits ist die symmetrische Differenz zwischen den beiden Operanden. Die folgenden beiden Befehle sind äquivalent
$ git rev-list A B --not $(git merge-base --all A B) $ git rev-list A...B
rev-list ist ein wesentlicher Git-Befehl, da er die Fähigkeit bietet, Commit-Abstammungsgraphen zu erstellen und zu durchlaufen. Aus diesem Grund verfügt er über viele verschiedene Optionen, die es ermöglichen, ihn von so unterschiedlichen Befehlen wie git bisect und git repack verwenden zu lassen.
OPTIONEN
Commit-Limitierung
Zusätzlich zur Angabe eines Commit-Bereichs, der mithilfe der speziellen Notationen, die in der Beschreibung erläutert werden, aufgelistet werden soll, können weitere Commit-Limitierungen angewendet werden.
Die Verwendung von mehr Optionen beschränkt in der Regel die Ausgabe weiter (z. B. beschränkt --since=<date1> auf neuere Commits als <date1>, und die Verwendung mit --grep=<pattern> schränkt weiter auf Commits ein, deren Log-Nachricht eine Zeile enthält, die <pattern> entspricht), sofern nicht anders angegeben.
Beachten Sie, dass diese Optionen vor Commit-Sortier- und Formatierungsoptionen wie --reverse angewendet werden.
-<nummer>-n<nummer>--max-count=<nummer>-
Begrenzt die Ausgabe auf <number> Commits.
--skip=<nummer>-
Überspringt <number> Commits, bevor die Commit-Ausgabe angezeigt wird.
--since=<datum>--after=<datum>-
Zeigt Commits neuer als <date> an.
--since-as-filter=<datum>-
Zeigt alle Commits neuer als <date> an. Dabei werden alle Commits im Bereich durchlaufen, anstatt beim ersten Commit anzuhalten, der älter als <date> ist.
--until=<datum>--before=<datum>-
Zeigt Commits älter als <date> an.
--max-age=<zeitstempel>--min-age=<zeitstempel>-
Beschränkt die Commitausgabe auf den angegebenen Zeitraum.
--author=<muster>--committer=<muster>-
Beschränkt die Ausgabe von Commits auf solche, deren Autor-/Committer-Headerzeilen dem regulären Ausdruck <pattern> entsprechen. Bei mehr als einem
--author=<pattern> werden Commits ausgewählt, deren Autor eines der <pattern> erfüllt (ähnlich für mehrere--committer=<pattern>). --grep-reflog=<muster>-
Beschränkt die Ausgabe von Commits auf solche mit Reflog-Einträgen, die dem regulären Ausdruck <pattern> entsprechen. Bei mehr als einem
--grep-reflogwerden Commits ausgewählt, deren Reflog-Nachricht einem der angegebenen Muster entspricht. Es ist ein Fehler, diese Option zu verwenden, es sei denn,--walk-reflogswird verwendet. --grep=<muster>-
Beschränkt die Ausgabe von Commits auf solche mit einer Log-Nachricht, die dem regulären Ausdruck <pattern> entspricht. Bei mehr als einem
--grep=<pattern> werden Commits ausgewählt, deren Nachricht einem der <pattern> entspricht (aber siehe--all-match). --all-match-
Beschränkt die Ausgabe von Commits auf solche, die allen angegebenen
--grep-Mustern entsprechen, anstatt solchen, die mindestens einem entsprechen. --invert-grep-
Beschränkt die Ausgabe von Commits auf solche mit einer Log-Nachricht, die nicht dem mit
--grep=<pattern> angegebenen <pattern> entsprechen. -i--regexp-ignore-case-
Gleicht die regulären Ausdrucksmuster für die Beschränkung ohne Berücksichtigung der Groß- und Kleinschreibung ab.
--basic-regexp-
Betrachtet die Muster für die Beschränkung als grundlegende reguläre Ausdrücke; dies ist der Standard.
-E--extended-regexp-
Betrachtet die Muster für die Beschränkung als erweiterte reguläre Ausdrücke anstelle der standardmäßigen grundlegenden regulären Ausdrücke.
-F--fixed-strings-
Betrachtet die Muster für die Beschränkung als feste Zeichenketten (interpretiert Muster nicht als regulären Ausdruck).
-P--perl-regexp-
Betrachtet die Muster für die Beschränkung als Perl-kompatible reguläre Ausdrücke.
Die Unterstützung für diese Arten von regulären Ausdrücken ist eine optionale Abhängigkeit zur Kompilierzeit. Wenn Git nicht mit Unterstützung dafür kompiliert wurde, führt die Bereitstellung dieser Option zum Abbruch.
--remove-empty-
Stoppt, wenn ein bestimmter Pfad aus dem Baum verschwindet.
--merges-
Gibt nur Merge-Commits aus. Dies ist exakt dasselbe wie
--min-parents=2. --no-merges-
Gibt keine Commits mit mehr als einem Elternteil aus. Dies ist exakt dasselbe wie
--max-parents=1. --min-parents=<nummer>--max-parents=<nummer>--no-min-parents--no-max-parents-
Zeigt nur Commits an, die mindestens (oder höchstens) so viele Eltern-Commits haben. Insbesondere ist
--max-parents=1dasselbe wie--no-merges,--min-parents=2ist dasselbe wie--merges.--max-parents=0gibt alle Wurzel-Commits und--min-parents=3alle Octopus-Merges aus.--no-min-parentsund--no-max-parentssetzen diese Limits wieder auf keine Begrenzung zurück. Äquivalente Formen sind--min-parents=0(jeder Commit hat 0 oder mehr Eltern) und--max-parents=-1(negative Zahlen bedeuten keine Obergrenze). --first-parent-
Bei der Suche nach einzubeziehenden Commits wird nur dem ersten Eltern-Commit gefolgt, wenn ein Merge-Commit angetroffen wird. Diese Option kann eine bessere Übersicht beim Betrachten der Entwicklung eines bestimmten Topic-Branches geben, da Merges in einen Topic-Branch tendenziell nur dazu dienen, von Zeit zu Zeit mit dem aktualisierten Upstream synchron zu werden. Diese Option erlaubt es Ihnen, die einzelnen Commits zu ignorieren, die durch einen solchen Merge in Ihre Historie gebracht wurden.
--exclude-first-parent-only-
Bei der Suche nach auszuschließenden Commits (mit einem ^) wird nur dem ersten Eltern-Commit gefolgt, wenn ein Merge-Commit angetroffen wird. Dies kann verwendet werden, um die Menge der Änderungen in einem Topic-Branch ab dem Punkt zu finden, an dem er sich vom Remote-Branch abzweigte, vorausgesetzt, beliebige Merges können gültige Topic-Branch-Änderungen sein.
--not-
Kehrt die Bedeutung des Präfixes ^ (oder des Fehlens davon) für alle folgenden Revisionsspezifizierer um, bis zum nächsten
--not. Wenn es auf der Kommandozeile vor --stdin verwendet wird, werden die über stdin übergebenen Revisionen nicht davon beeinflusst. Umgekehrt werden, wenn es über die Standardeingabe übergeben wird, die auf der Kommandozeile übergebenen Revisionen nicht davon beeinflusst. --all-
Verhält sich so, als ob alle Refs in
refs/zusammen mitHEADauf der Kommandozeile als <commit> aufgelistet wären. --branches[=<muster>]-
Verhält sich so, als ob alle Refs in
refs/headsauf der Kommandozeile als <commit> aufgelistet wären. Wenn <pattern> angegeben ist, werden die Branches auf diejenigen beschränkt, die dem angegebenen Shell-Glob-Muster entsprechen. Wenn <pattern> keine ?, * oder [ enthält, wird am Ende /* angenommen. --tags[=<muster>]-
Verhält sich so, als ob alle Refs in
refs/tagsauf der Kommandozeile als <commit> aufgelistet wären. Wenn <pattern> angegeben ist, werden die Tags auf diejenigen beschränkt, die dem angegebenen Shell-Glob-Muster entsprechen. Wenn das Muster keine ?, * oder [ enthält, wird am Ende /* angenommen. --remotes[=<muster>]-
Verhält sich so, als ob alle Refs in
refs/remotesauf der Kommandozeile als <commit> aufgelistet wären. Wenn <pattern> angegeben ist, werden die Remote-Tracking-Branches auf diejenigen beschränkt, die dem angegebenen Shell-Glob-Muster entsprechen. Wenn das Muster keine ?, * oder [ enthält, wird am Ende /* angenommen. --glob=<glob-muster>-
Verhält sich so, als ob alle Refs, die dem Shell-Glob-Muster <glob-pattern> entsprechen, auf der Kommandozeile als <commit> aufgelistet wären. Wenn das Präfix refs/ fehlt, wird es automatisch hinzugefügt. Wenn das Muster keine ?, * oder [ enthält, wird am Ende /* angenommen.
--exclude=<glob-muster>-
Schließt Refs aus, die dem Muster <glob-pattern> entsprechen und die der nächste
--all,--branches,--tags,--remotesoder--globsonst berücksichtigen würde. Wiederholungen dieser Option häufen Ausschlussmuster an bis zum nächsten--all,--branches,--tags,--remotesoder--globOption (andere Optionen oder Argumente löschen keine angesammelten Muster).Die angegebenen Muster dürfen nicht mit
refs/heads,refs/tagsoderrefs/remotesbeginnen, wenn sie auf--branches,--tagsbzw.--remotesangewendet werden, und sie müssen mitrefs/beginnen, wenn sie auf--globoder--allangewendet werden. Wenn ein nachgestelltes /* beabsichtigt ist, muss es explizit angegeben werden. -
Schließt Refs aus, die von
git-fetch,git-receive-packodergit-upload-packverborgen würden, indem die entsprechenden Konfigurationenfetch.hideRefs,receive.hideRefsoderuploadpack.hideRefszusammen mittransfer.hideRefskonsultiert werden (siehe git-config[1]). Diese Option beeinflusst die nächste Pseudo-Ref-Option--alloder--globund wird nach deren Verarbeitung gelöscht. --reflog-
Verhält sich so, als ob alle von Reflogs referenzierten Objekte auf der Kommandozeile als <commit> aufgelistet wären.
--alternate-refs-
Verhält sich so, als ob alle Objekte, die als Ref-Spitzen von alternativen Repositories referenziert werden, auf der Kommandozeile aufgelistet wären. Ein alternatives Repository ist jedes Repository, dessen Objektverzeichnis in
objects/info/alternatesangegeben ist. Die Menge der eingeschlossenen Objekte kann durchcore.alternateRefsCommandusw. modifiziert werden. Siehe git-config[1]. --single-worktree-
Standardmäßig werden alle Arbeitsbäume von den folgenden Optionen untersucht, wenn mehr als einer vorhanden ist (siehe git-worktree[1]):
--all,--reflogund--indexed-objects. Diese Option zwingt sie, nur den aktuellen Arbeitsbaum zu untersuchen. --ignore-missing-
Beim Ansehen eines ungültigen Objektnamens in der Eingabe, verhalten Sie sich so, als wäre die fehlerhafte Eingabe nicht gegeben worden.
--stdin-
Zusätzlich zum Empfangen von Argumenten von der Kommandozeile werden diese auch von der Standardeingabe gelesen. Dies akzeptiert Commits und Pseudo-Optionen wie
--allund--glob=. Wenn ein Trennzeichen--gesehen wird, wird die folgende Eingabe als Pfade behandelt und zur Begrenzung des Ergebnisses verwendet. Flags wie--not, die über die Standardeingabe gelesen werden, werden nur für die auf die gleiche Weise übergebenen Argumente berücksichtigt und beeinflussen keine nachfolgenden Kommandozeilenargumente. --quiet-
Gibt nichts auf die Standardausgabe aus. Diese Form ist hauptsächlich dazu gedacht, dem Aufrufer zu ermöglichen, den Exit-Status zu testen, um zu sehen, ob ein Bereich von Objekten vollständig verbunden ist (oder nicht). Sie ist schneller als die Umleitung von stdout nach
/dev/null, da die Ausgabe nicht formatiert werden muss. --disk-usage--disk-usage=human-
Unterdrückt die normale Ausgabe; stattdessen wird die Summe der Bytes für die On-Disk-Speicherung der ausgewählten Commits oder Objekte ausgegeben. Dies ist äquivalent zum Piping der Ausgabe in
gitcat-file--batch-check='%(objectsize:disk), läuft aber viel schneller (insbesondere mit--use-bitmap-index). Siehe den AbschnittCAVEATSin git-cat-file[1] für die Einschränkungen dessen, was "On-Disk-Speicherung" bedeutet. Mit dem optionalen Werthumanwird die On-Disk-Speichergröße in einer für Menschen lesbaren Zeichenkette angezeigt (z. B. 12,24 Kib, 3,50 Mib). --cherry-mark-
Ähnlich wie
--cherry-pick(siehe unten), aber gleichwertige Commits werden mit=markiert anstatt weggelassen zu werden, und ungleichwertige mit+. --cherry-pick-
Lässt jeden Commit aus, der dieselbe Änderung wie ein anderer Commit auf der "anderen Seite" einführt, wenn die Menge der Commits durch symmetrische Differenz begrenzt wird.
Wenn Sie beispielsweise zwei Branches,
AundB, haben, ist eine übliche Methode, alle Commits auf nur einer Seite davon aufzulisten,--left-right(siehe das Beispiel unten in der Beschreibung der--left-rightOption). Allerdings werden die Commits angezeigt, die von dem anderen Branch cherry-picked wurden (z. B. "3rd on b" könnte von Branch A cherry-picked worden sein). Mit dieser Option werden solche Commit-Paare von der Ausgabe ausgeschlossen. --left-only--right-only-
Listet nur Commits auf der jeweiligen Seite einer symmetrischen Differenz auf, d. h. nur diejenigen, die von
--left-rightals < bzw. > markiert würden.Zum Beispiel lässt
--cherry-pick--right-onlyA...Bjene Commits ausBaus, die inAenthalten sind oder Patch-Äquivalente zu einem Commit inAhaben. Mit anderen Worten, dies listet die+Commits ausgitcherryABauf. Genauer gesagt,--cherry-pick--right-only--no-mergesliefert die exakte Liste. --cherry-
Ein Synonym für
--right-only--cherry-mark--no-merges; nützlich, um die Ausgabe auf die Commits auf unserer Seite zu beschränken und diejenigen zu markieren, die auf der anderen Seite einer verzweigten Historie angewendet wurden, mitgitlog--cherryupstream...mybranch, ähnlich wie beigitcherryupstreammybranch. -g--walk-reflogs-
Anstatt die Commit-Abstammungskette zu durchlaufen, werden die Reflog-Einträge von den neuesten zu den älteren durchlaufen. Wenn diese Option verwendet wird, können keine Commits zum Ausschluss angegeben werden (d.h. die Notationen
^<commit>, <commit1>..<commit2> und <commit1>...<commit2> können nicht verwendet werden).Mit einem
--pretty-Format außeronelineundreference(aus offensichtlichen Gründen) führt dies dazu, dass die Ausgabe zwei zusätzliche Zeilen mit Informationen aus dem Reflog enthält. Der Reflog-Deskriptor in der Ausgabe kann alsref@{<Nth>}(wobei <Nth> der reverse-chronologische Index im Reflog ist) oder alsref@{<timestamp>}(mit dem <timestamp> für diesen Eintrag) angezeigt werden, abhängig von einigen Regeln.-
Wenn der Startpunkt als
ref@{<Nth>}angegeben ist, wird das Indexformat angezeigt. -
Wenn der Startpunkt als
ref@{now}angegeben war, wird das Zeitstempelformat angezeigt. -
Wenn keiner von beiden verwendet wurde, aber
--dateauf der Kommandozeile angegeben wurde, wird der Zeitstempel im angeforderten Format von--dateangezeigt. -
Andernfalls wird das Indexformat angezeigt.
Unter
--pretty=onelinewird die Commit-Nachricht mit diesen Informationen auf derselben Zeile vorangestellt. Diese Option kann nicht mit--reversekombiniert werden. Siehe auch git-reflog[1].Unter
--pretty=referencewerden diese Informationen überhaupt nicht angezeigt. -
--merge-
Zeigt Commits an, die sich mit widersprüchlichen Pfaden im Bereich
HEAD...<other> befassen, wobei <other> die erste existierende Pseudoref inMERGE_HEAD,CHERRY_PICK_HEAD,REVERT_HEADoderREBASE_HEADist. Funktioniert nur, wenn der Index ungelöste Einträge aufweist. Diese Option kann verwendet werden, um relevante Commits anzuzeigen, wenn Konflikte aus einem 3-Wege-Merge gelöst werden. --boundary-
Gibt ausgeschlossene Grenzmeldungen aus. Grenzmeldungen werden mit
-vorangestellt. --use-bitmap-index-
Versucht, die Traversierung mithilfe des Pack-Bitmap-Indexes zu beschleunigen (falls vorhanden). Beachten Sie, dass beim Traversieren mit
--objectsdie zugehörigen Pfade von Bäumen und Blobs nicht ausgegeben werden. --progress=<header>-
Zeigt Fortschrittsberichte auf stderr an, während Objekte berücksichtigt werden. Der Text <header> wird bei jeder Fortschrittsaktualisierung ausgegeben.
-z-
Anstatt durch Zeilenumbrüche getrennt zu sein, werden jedes ausgegebene Objekt und seine begleitenden Metadaten durch NUL-Bytes getrennt. Die Ausgabe erfolgt in folgender Form
<OID> NUL [<token>=<value> NUL]...
Zusätzliche Objektmetadaten, wie Objektpfade oder Grenzobjekte, werden in der Form <token>
=<wert> ausgegeben. Token-Werte werden unverändert ausgegeben, ohne jegliche Kodierung/Abschneidung. Ein OID-Eintrag enthält niemals ein = Zeichen und wird daher verwendet, um den Beginn eines neuen Objekt-Datensatzes zu signalisieren. Beispiele<OID> NUL <OID> NUL path=<path> NUL <OID> NUL boundary=yes NUL <OID> NUL missing=yes NUL [<token>=<value> NUL]...
Dieser Modus ist nur mit den Ausgabeoptionen
--objects,--boundaryund--missingkompatibel.
Verlauf vereinfachung
Manchmal interessieren Sie sich nur für Teile des Verlaufs, zum Beispiel die Commits, die einen bestimmten <path> ändern. Aber es gibt zwei Teile der Verlauf vereinfachung, ein Teil ist die Auswahl der Commits und der andere ist die Art und Weise, wie dies geschieht, da es verschiedene Strategien zur Vereinfachung des Verlaufs gibt.
Die folgenden Optionen wählen die anzuzeigenden Commits aus
Beachten Sie, dass zusätzliche Commits angezeigt werden können, um einen aussagekräftigen Verlauf zu erhalten.
Die folgenden Optionen beeinflussen die Art und Weise, wie die Vereinfachung durchgeführt wird
StandardModus-
Vereinfacht die Historie zur einfachsten Historie, die den Endzustand des Baums erklärt. Am einfachsten, weil sie einige Nebenäste beschneidet, wenn das Endergebnis dasselbe ist (d. h. Zweige mit demselben Inhalt zusammenführt).
--show-pulls-
Schließt alle Commits vom Standardmodus ein, aber auch alle Merge-Commits, die NICHT TREESAME zum ersten Elternteil sind, aber TREESAME zu einem späteren Elternteil sind. Dieser Modus ist hilfreich, um die Merge-Commits anzuzeigen, die eine Änderung "erstmals" in einen Branch "eingeführt" haben.
--full-history-
Dasselbe wie der Standardmodus, schneidet jedoch keine Historie ab.
--dense-
Nur die ausgewählten Commits werden angezeigt, plus einige, um eine aussagekräftige Historie zu haben.
--sparse-
Alle Commits in der vereinfachten Historie werden angezeigt.
--simplify-merges-
Zusätzliche Option zu
--full-history, um einige unnötige Merges aus der resultierenden Historie zu entfernen, da keine ausgewählten Commits zu diesem Merge beitragen. --ancestry-path[=<commit>]-
Wenn ein Bereich von Commits zum Anzeigen angegeben wird (z. B. <commit1>
..<commit2> oder <commit2>^<commit1>) und ein Commit <commit> in diesem Bereich, werden nur Commits in diesem Bereich angezeigt, die Vorfahren von <commit>, Nachkommen von <commit> oder <commit> selbst sind. Wenn kein Commit angegeben ist, wird <commit1> (der ausgeschlossene Teil des Bereichs) als <commit> verwendet. Kann mehrmals übergeben werden; in diesem Fall wird ein Commit einbezogen, wenn er einer der angegebenen Commits ist oder wenn er ein Vorfahre oder Nachkomme davon ist.
Eine detailliertere Erklärung folgt.
Angenommen, Sie haben foo als <paths> angegeben. Wir nennen Commits, die foo modifizieren, !TREESAME und die übrigen TREESAME. (In einem für foo gefilterten Diff sehen sie unterschiedlich und gleich aus, bzw.)
Im Folgenden werden wir immer denselben Beispielverlauf verwenden, um die Unterschiede zwischen den Vereinfachungseinstellungen zu veranschaulichen. Wir gehen davon aus, dass Sie für eine Datei foo in diesem Commit-Graphen filtern.
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
Die horizontale Historienlinie A---Q wird als erster Elternteil jedes Merges betrachtet. Die Commits sind:
-
Iist der initiale Commit, in demfoomit dem Inhaltasdfexistiert und eine Dateiquuxmit dem Inhaltquuxexistiert. Initiale Commits werden mit einem leeren Baum verglichen, daher istI!TREESAME. -
In
Aenthältfoonurfoo. -
Benthält dieselbe Änderung wieA. Sein MergeMist trivial und daher TREESAME zu allen Elternteilen. -
Cändertfoonicht, aber sein MergeNändert es zufoobar, daher ist es nicht TREESAME zu irgendeinem Elternteil. -
Dsetztfooaufbaz. Sein MergeOkombiniert die Zeichenketten vonNundDzufoobarbaz; d. h. er ist nicht TREESAME zu irgendeinem Elternteil. -
Eändertquuxzuxyzzyund sein MergePkombiniert die Zeichenketten zuquuxxyzzy.Pist TREESAME zuO, aber nicht zuE. -
Xist ein unabhängiger Root-Commit, der eine neue Dateisidehinzugefügt hat, undYhat sie modifiziert.Yist TREESAME zuX. Sein MergeQfügtsidezuPhinzu, undQist TREESAME zuP, aber nicht zuY.
rev-list durchläuft die Historie rückwärts und schließt Commits ein oder schließt sie aus, je nachdem, ob --full-history und/oder Elternteil-Rewriting (über --parents oder --children) verwendet werden. Die folgenden Einstellungen sind verfügbar.
- Standardmodus
-
Commits werden einbezogen, wenn sie NICHT TREESAME zu irgendeinem Elternteil sind (obwohl dies geändert werden kann, siehe
--sparseunten). Wenn der Commit ein Merge war und er TREESAME zu einem Elternteil war, folgen Sie nur diesem Elternteil. (Auch wenn es mehrere TREESAME-Elternteile gibt, folgen Sie nur einem davon.) Andernfalls folgen Sie allen Elternteilen.Dies führt zu
.-A---N---O / / / I---------D
Beachten Sie, wie die Regel, nur dem TREESAME-Elternteil zu folgen, falls einer verfügbar ist,
Bvollständig aus der Betrachtung entfernt hat.Cwurde überNberücksichtigt, ist aber TREESAME. Root-Commits werden mit einem leeren Baum verglichen, daher istI!TREESAME.Eltern-/Kind-Beziehungen sind nur mit
--parentssichtbar, aber das beeinflusst nicht die im Standardmodus ausgewählten Commits, daher haben wir die Elternlinien gezeigt. --full-historyohne Neuschreiben der Eltern-
Dieser Modus unterscheidet sich vom Standard in einem Punkt: Folgen Sie immer allen Elternteilen eines Merges, auch wenn er TREESAME zu einem davon ist. Selbst wenn mehr als eine Seite des Merges Commits enthält, die einbezogen werden, bedeutet dies nicht, dass der Merge selbst einbezogen wird! Im Beispiel erhalten wir
I A B N D O P Q
Mwurde ausgeschlossen, weil er TREESAME zu beiden Elternteilen ist.E,CundBwurden alle durchlaufen, aber nurBwar !TREESAME, daher erscheinen die anderen nicht.Beachten Sie, dass es ohne Elternteil-Rewriting nicht wirklich möglich ist, über die Eltern-/Kind-Beziehungen zwischen den Commits zu sprechen, daher zeigen wir sie getrennt.
--full-historymit Neuschreiben der Eltern-
Gewöhnliche Commits werden nur dann einbezogen, wenn sie !TREESAME sind (obwohl dies geändert werden kann, siehe
--sparseunten).Merges werden immer einbezogen. Ihre Elternliste wird jedoch neu geschrieben: Entlang jedes Elternteils werden Commits, die selbst nicht einbezogen werden, entfernt. Dies führt zu
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
Vergleichen Sie mit
--full-historyohne Rewriting oben. Beachten Sie, dassEentfernt wurde, weil es TREESAME ist, aber die Elternliste von P wurde so neu geschrieben, dass sieEs ElternteilIenthält. Dasselbe geschah fürCundNsowie fürX,YundQ.
Zusätzlich zu den obigen Einstellungen können Sie ändern, ob TREESAME die Einbeziehung beeinflusst.
--dense-
Durchlaufene Commits werden einbezogen, wenn sie NICHT TREESAME zu irgendeinem Elternteil sind.
--sparse-
Alle durchlaufenen Commits werden einbezogen.
Beachten Sie, dass dies ohne
--full-historyimmer noch Merges vereinfacht: Wenn einer der Elternteile TREESAME ist, folgen wir nur diesem, sodass die anderen Seiten des Merges niemals durchlaufen werden. --simplify-merges-
Bauen Sie zuerst einen Historien-Graphen auf, auf die gleiche Weise, wie
--full-historymit Elternteil-Rewriting es tut (siehe oben).Vereinfachen Sie dann jeden Commit
Czu seinem ErsatzC'in der endgültigen Historie gemäß den folgenden Regeln:-
Setzen Sie
C'aufC. -
Ersetzen Sie jeden Elternteil
PvonC'durch seine VereinfachungP'. Dabei werden Elternteile, die Vorfahren anderer Elternteile sind oder die Root-Commits sind, die TREESAME zu einem leeren Baum sind, verworfen und Duplikate entfernt, aber darauf geachtet, nie alle Elternteile zu verwerfen, zu denen wir TREESAME sind. -
Wenn nach diesem Elternteil-Rewriting
C'ein Root- oder Merge-Commit ist (null oder mehr als 1 Elternteil hat), ein Rand-Commit ist oder !TREESAME ist, bleibt er bestehen. Andernfalls wird er durch seinen einzigen Elternteil ersetzt.
Die Auswirkung hiervon wird am besten durch den Vergleich mit
--full-historymit Elternteil-Rewriting gezeigt. Das Beispiel wird zu.-A---M---N---O / / / I B D \ / / `---------'
Beachten Sie die wesentlichen Unterschiede bei
N,PundQim Vergleich zu--full-history.-
Ns Elternliste enthieltI, das entfernt wurde, da es ein Vorfahre des anderen ElternteilsMist. Dennoch bliebNbestehen, da es !TREESAME ist. -
Ps Elternliste hatte ebenfallsI, das entfernt wurde.Pwurde dann vollständig entfernt, da es einen Elternteil hatte und TREESAME war. -
Qs Elternliste hatteYvereinfacht zuX.Xwurde dann entfernt, da es ein TREESAME-Root war.Qwurde dann vollständig entfernt, da es einen Elternteil hatte und TREESAME war.
-
Es gibt einen weiteren verfügbaren Vereinfachungsmodus.
--ancestry-path[=<commit>]-
Beschränkt die angezeigten Commits auf solche, die Vorfahren von <commit> sind, oder die Nachkommen von <commit> sind, oder <commit> selbst sind.
Betrachten wir als Beispiel für die Anwendung die folgende Commit-Historie.
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
Ein normales D..M berechnet die Menge der Commits, die Vorfahren von
Msind, schließt aber die aus, die Vorfahren vonDsind. Dies ist nützlich, um zu sehen, was mit der Historie geschehen ist, die zuMführt, seitDexistiert, im Sinne von "was hatM, das inDnicht existierte?". Das Ergebnis in diesem Beispiel wären alle Commits, außerAundB(und natürlichDselbst).Wenn wir herausfinden wollen, welche Commits in
Mmit dem vonDeingeführten Fehler kontaminiert sind und behoben werden müssen, möchten wir vielleicht nur die Teilmenge vonD..Mbetrachten, die tatsächlich Nachkommen vonDsind, d.h.CundKausschließen. Genau das leistet die Option--ancestry-path. Angenommen auf den BereichD..M, führt dies zuE-------F \ \ G---H---I---J \ L--M
Wir können auch
--ancestry-path=Danstelle von--ancestry-pathverwenden, was im Kontext des BereichsD..Mdasselbe bedeutet, aber nur expliziter ist.Wenn wir stattdessen an einem bestimmten Thema innerhalb dieses Bereichs und allen davon betroffenen Commits interessiert sind, möchten wir vielleicht nur die Teilmenge von
D..Mbetrachten, die dieses Thema in ihrem Vorfahrenpfad enthalten. So würde zum Beispiel die Verwendung von--ancestry-path=HD..MzuE \ C---G---H---I---J \ L--M
während
--ancestry-path=KD..MzuK---------------L--M
Bevor wir eine weitere Option, --show-pulls, besprechen, müssen wir ein neues Beispiel-Historie erstellen.
Ein häufiges Problem, mit dem Benutzer konfrontiert sind, wenn sie sich eine vereinfachte Historie ansehen, ist, dass ein Commit, von dem sie wissen, dass er eine Datei irgendwie geändert hat, in der vereinfachten Historie dieser Datei nicht erscheint. Lassen Sie uns ein neues Beispiel demonstrieren und zeigen, wie Optionen wie --full-history und --simplify-merges in diesem Fall funktionieren.
.-A---M-----C--N---O---P / / \ \ \/ / / I B \ R-'`-Z' / \ / \/ / \ / /\ / `---X--' `---Y--'
Für dieses Beispiel nehmen wir an, dass ich file.txt erstellt habe, das von A, B und X auf verschiedene Weise geändert wurde. Die Single-Parent-Commits C, Z und Y ändern file.txt nicht. Der Merge-Commit M wurde durch Auflösen eines Merge-Konflikts erstellt, um beide Änderungen von A und B einzubeziehen und ist daher weder mit dem einen noch mit dem anderen TREESAME. Der Merge-Commit R wurde jedoch durch Ignorieren des Inhalts von file.txt in M und Aufnahme nur des Inhalts von file.txt in X erstellt. Daher ist R TREESAME zu X, aber nicht zu M. Schließlich ist die natürliche Merge-Auflösung zur Erstellung von N die Übernahme des Inhalts von file.txt in R, sodass N TREESAME zu R ist, aber nicht zu C. Die Merge-Commits O und P sind TREESAME zu ihren ersten Eltern, aber nicht zu ihren zweiten Eltern, Z und Y.
Bei Verwendung des Standardmodus haben sowohl N als auch R einen TREESAME-Elternteil, daher werden diese Kanten durchlaufen und die anderen ignoriert. Der resultierende Historien-Graph ist
I---X
Bei Verwendung von --full-history durchläuft Git jede Kante. Dies wird die Commits A und B sowie den Merge M aufdecken, wird aber auch die Merge-Commits O und P enthüllen. Mit Elternteil-Rewriting ist der resultierende Graph
.-A---M--------N---O---P / / \ \ \/ / / I B \ R-'`--' / \ / \/ / \ / /\ / `---X--' `------'
Hier tragen die Merge-Commits O und P zusätzlichen Lärm, da sie tatsächlich keine Änderung an file.txt vorgenommen haben. Sie haben nur ein Thema gemerged, das auf einer älteren Version von file.txt basierte. Dies ist ein häufiges Problem in Repositories, die einen Workflow verwenden, bei dem viele Mitwirkende parallel arbeiten und ihre Topic-Branches entlang eines einzelnen Stammes zusammenführen: Viele nicht zusammenhängende Merges erscheinen in den Ergebnissen von --full-history.
Bei Verwendung der Option --simplify-merges verschwinden die Commits O und P aus den Ergebnissen. Dies liegt daran, dass die neu geschriebenen zweiten Elternteile von O und P von ihren ersten Elternteilen erreichbar sind. Diese Kanten werden entfernt und dann sehen die Commits wie Single-Parent-Commits aus, die TREESAME zu ihrem Elternteil sind. Dies geschieht auch mit dem Commit N, was zu einer Historienansicht wie folgt führt:
.-A---M--. / / \ I B R \ / / \ / / `---X--'
In dieser Ansicht sehen wir alle wichtigen Single-Parent-Änderungen von A, B und X. Wir sehen auch den sorgfältig aufgelösten Merge M und den nicht so sorgfältig aufgelösten Merge R. Dies ist normalerweise ausreichend, um zu bestimmen, warum die Commits A und B in der Standardansicht aus der Historie "verschwunden" sind. Es gibt jedoch einige Probleme mit diesem Ansatz.
Das erste Problem ist die Leistung. Im Gegensatz zu jeder früheren Option erfordert die Option --simplify-merges das Durchlaufen der gesamten Commit-Historie, bevor ein einzelnes Ergebnis zurückgegeben wird. Dies kann die Option für sehr große Repositories schwierig zu verwenden machen.
Das zweite Problem ist die Prüfung. Wenn viele Mitwirkende am selben Repository arbeiten, ist es wichtig, welche Merge-Commits eine Änderung in einen wichtigen Branch eingeführt haben. Der problematische Merge R oben ist wahrscheinlich nicht der Merge-Commit, der verwendet wurde, um in einen wichtigen Branch zu mergen. Stattdessen wurde der Merge N verwendet, um R und X in den wichtigen Branch zu mergen. Dieser Commit kann Informationen darüber enthalten, warum die Änderung X die Änderungen von A und B in seiner Commit-Nachricht überschrieben hat.
--show-pulls-
Zusätzlich zu den im Standardverlauf angezeigten Commits werden alle Merge-Commits angezeigt, die nicht TREESAME zu ihrem ersten Elternteil sind, aber TREESAME zu einem späteren Elternteil sind.
Wenn ein Merge-Commit von
--show-pullseinbezogen wird, wird der Merge so behandelt, als ob er die Änderung von einem anderen Branch "gezogen" hätte. Wenn--show-pullsauf dieses Beispiel angewendet wird (und keine anderen Optionen), ist der resultierende GraphI---X---R---N
Hier werden die Merge-Commits
RundNeinbezogen, da sie die CommitsXbzw.Rin den Basis-Branch "gezogen" haben. Diese Merges sind der Grund dafür, dass die CommitsAundBnicht im Standardverlauf erscheinen.Wenn
--show-pullsmit--simplify-mergeskombiniert wird, enthält der Graph alle notwendigen Informationen..-A---M--. N / / \ / I B R \ / / \ / / `---X--'
Beachten Sie, dass, da
MvonRerreichbar ist, die Kante vonNnachMvereinfacht wurde.Nerscheint jedoch immer noch in der Historie als wichtiger Commit, da er die ÄnderungRin den Haupt-Branch "gezogen" hat.
Die Option --simplify-by-decoration ermöglicht es Ihnen, nur die Gesamtübersicht über die Topologie der Historie anzuzeigen, indem Commits weggelassen werden, die nicht von Tags referenziert werden. Commits werden als !TREESAME markiert (mit anderen Worten, nach den oben beschriebenen Historienvereinfachungsregeln beibehalten), wenn (1) sie von Tags referenziert werden oder (2) sie den Inhalt der auf der Befehlszeile angegebenen Pfade ändern. Alle anderen Commits werden als TREESAME markiert (können also vereinfacht wegfallen).
Bisection-Helfer
--bisect-
Beschränkt die Ausgabe auf das eine Commit-Objekt, das sich ungefähr auf halbem Weg zwischen den eingeschlossenen und ausgeschlossenen Commits befindet. Beachten Sie, dass der schlechte Bisection-Ref
refs/bisect/badzu den eingeschlossenen Commits hinzugefügt wird (falls vorhanden) und die guten Bisection-Refsrefs/bisect/good-*zu den ausgeschlossenen Commits hinzugefügt werden (falls vorhanden). Wenn also keine Refs inrefs/bisect/vorhanden sind, wenn$ git rev-list --bisect foo ^bar ^baz
gibt midpoint aus, dann hat die Ausgabe der beiden Befehle
$ git rev-list foo ^midpoint $ git rev-list midpoint ^bar ^baz
ungefähr die gleiche Länge. Das Finden des die Regression einführenden Commits wird somit auf eine binäre Suche reduziert: wiederholt werden neue 'midpoint's generiert und getestet, bis die Commit-Kette die Länge eins hat.
--bisect-vars-
Dies berechnet dasselbe wie
--bisect, außer dass Refs inrefs/bisect/nicht verwendet werden und außer dass dies Text ausgibt, der bereit ist, von der Shell evaluiert zu werden. Diese Zeilen weisen den Namen der Mittelpunkt-Revision der Variablenbisect_revzu und die erwartete Anzahl von Commits, die nach dem Testen vonbisect_revgetestet werden müssen, der Variablenbisect_nr, die erwartete Anzahl von Commits, die getestet werden müssen, wennbisect_revgut ist, der Variablenbisect_good, die erwartete Anzahl von Commits, die getestet werden müssen, wennbisect_revschlecht ist, der Variablenbisect_bad, und die Anzahl der Commits, die wir gerade bisektieren, der Variablenbisect_all. --bisect-all-
Dies gibt alle Commit-Objekte zwischen den eingeschlossenen und ausgeschlossenen Commits aus, geordnet nach ihrer Entfernung zu den eingeschlossenen und ausgeschlossenen Commits. Refs in
refs/bisect/werden nicht verwendet. Der am weitesten entfernte wird zuerst angezeigt. (Dies ist der einzige, der von--bisectangezeigt wird.)Dies ist nützlich, da es die Auswahl eines guten Commits zum Testen erleichtert, wenn Sie einige davon aus irgendeinem Grund vermeiden möchten (sie lassen sich möglicherweise nicht kompilieren).
Diese Option kann zusammen mit
--bisect-varsverwendet werden. In diesem Fall werden nach allen sortierten Commit-Objekten dieselben Texte ausgegeben, als ob--bisect-varsallein verwendet worden wäre.
Commit-Reihenfolge
Standardmäßig werden die Commits in umgekehrt chronologischer Reihenfolge angezeigt.
--date-order-
Zeigt keine Eltern an, bevor alle ihre Kinder angezeigt wurden, zeigt aber ansonsten Commits in der Reihenfolge der Commit-Zeitstempel an.
--author-date-order-
Zeigt keine Eltern an, bevor alle ihre Kinder angezeigt wurden, zeigt aber ansonsten Commits in der Reihenfolge der Autoren-Zeitstempel an.
--topo-order-
Zeigt keine Eltern an, bevor alle ihre Kinder angezeigt wurden, und vermeidet die Anzeige von Commits aus mehreren parallelen Verzweigungen vermischt.
Zum Beispiel in einer Commit-Historie wie dieser
---1----2----4----7 \ \ 3----5----6----8---
wobei die Zahlen die Reihenfolge der Commit-Zeitstempel bezeichnen, zeigt
gitrev-listund ähnliche Befehle mit--date-orderdie Commits in der Zeitstempelreihenfolge an: 8 7 6 5 4 3 2 1.Mit
--topo-orderwürden sie 8 6 5 3 7 4 2 1 (oder 8 7 4 2 6 5 3 1) anzeigen; einige ältere Commits werden vor neueren angezeigt, um die Anzeige von Commits aus zwei parallelen Entwicklungssträngen gemischt zu vermeiden. --reverse-
Gibt die ausgewählten Commits (siehe Abschnitt Commit-Begrenzung oben) in umgekehrter Reihenfolge aus. Kann nicht mit
--walk-reflogskombiniert werden.
Objekt-Traversierung
Diese Optionen sind hauptsächlich für das Packen von Git-Repositories gedacht.
--objects-
Gibt die Objekt-IDs aller von den aufgeführten Commits referenzierten Objekte aus.
--objectsfoo^barbedeutet also "senden Sie mir alle Objekt-IDs, die ich herunterladen muss, wenn ich das Commit-Objektbarhabe, aber nichtfoo". Siehe auch--object-namesunten. --in-commit-order-
Gibt Baum- und Blob-IDs in der Reihenfolge der Commits aus. Die Baum- und Blob-IDs werden ausgegeben, nachdem sie erstmals von einem Commit referenziert wurden.
--objects-edge-
Ähnlich wie
--objects, gibt aber auch die IDs von ausgeschlossenen Commits mit einem "-"-Präfix aus. Dies wird von git-pack-objects[1] verwendet, um ein "dünnes" Pack zu erstellen, das Objekte in deltifizierter Form basierend auf Objekten in diesen ausgeschlossenen Commits aufzeichnet, um den Netzwerkverkehr zu reduzieren. --objects-edge-aggressive-
Ähnlich wie
--objects-edge, versucht aber aggressiver, ausgeschlossene Commits zu finden, auf Kosten erhöhter Zeit. Dies wird anstelle von--objects-edgeverwendet, um "dünne" Packs für flache Repositories zu erstellen. --indexed-objects-
Verhält sich so, als ob alle von der Indexdatei verwendeten Bäume und Blobs auf der Kommandozeile aufgeführt wären. Beachten Sie, dass Sie wahrscheinlich auch
--objectsverwenden möchten. --unpacked-
Nur nützlich mit
--objects; gibt die Objekt-IDs aus, die nicht in Packs enthalten sind. --object-names-
Nur nützlich mit
--objects; gibt die Namen der gefundenen Objekt-IDs aus. Dies ist das Standardverhalten. Beachten Sie, dass der "Name" jedes Objekts mehrdeutig ist und hauptsächlich als Hinweis zum Packen von Objekten gedacht ist. Insbesondere: es wird keine Unterscheidung zwischen den Namen von Tags, Bäumen und Blobs gemacht; Pfadnamen können modifiziert werden, um Zeilenumbrüche zu entfernen; und wenn ein Objekt mehrmals mit unterschiedlichen Namen erscheinen würde, wird nur ein Name angezeigt. --no-object-names-
Nur nützlich mit
--objects; gibt die Namen der gefundenen Objekt-IDs nicht aus. Dies kehrt--object-namesum. Dieses Flag ermöglicht eine einfachere Verarbeitung der Ausgabe durch Befehle wie git-cat-file[1]. --filter=<filter-spec>-
Nur nützlich mit einer der Optionen
--objects*; lässt Objekte (normalerweise Blobs) aus der Liste der ausgegebenen Objekte weg. Die <filter-spec> kann eine der folgenden seinDie Form
--filter=blob:nonelässt alle Blobs weg.Die Form
--filter=blob:limit=<n>[kmg] lässt Blobs der Größe von mindestens <n> Bytes oder Einheiten weg. <n> kann null sein. Die Suffixek,mundgkönnen zur Benennung von Einheiten in KiB, MiB oder GiB verwendet werden. Zum Beispiel istblob:limit=1kdasselbe wie blob:limit=1024.Die Form
--filter=object:type=(tag|commit|tree|blob) lässt alle Objekte weg, die nicht vom angeforderten Typ sind.Die Form
--filter=sparse:oid=<blob-ähnlich> verwendet eine Sparse-Checkout-Spezifikation, die im Blob (oder Blob-Ausdruck) <blob-ähnlich> enthalten ist, um Blobs wegzulassen, die für ein Sparse-Checkout auf den angeforderten Refs nicht erforderlich wären.Die Form
--filter=tree:<tiefe> lässt alle Blobs und Bäume weg, deren Tiefe vom Wurzelbaum >= <tiefe> ist (minimale Tiefe, wenn ein Objekt auf mehreren Ebenen in den durchlaufenen Commits liegt). <tiefe>=0 schließt keine Bäume oder Blobs ein, es sei denn, sie sind explizit in der Befehlszeile (oder der Standardeingabe bei Verwendung von--stdin) enthalten. <tiefe>=1 schließt nur den Baum und die Blobs ein, die direkt von einem Commit referenziert werden, der von <commit> oder einem explizit angegebenen Objekt erreichbar ist. <tiefe>=2 ist wie <tiefe>=1 und schließt auch Bäume und Blobs ein, die eine Ebene weiter von einem explizit angegebenen Commit oder Baum entfernt sind.Beachten Sie, dass die Form
--filter=sparse:path=<pfad>, die aus einem beliebigen Pfad im Dateisystem lesen möchte, aus Sicherheitsgründen entfernt wurde.Mehrere
--filter=Flags können angegeben werden, um Filter zu kombinieren. Nur Objekte, die von jedem Filter akzeptiert werden, werden eingeschlossen.Die Form
--filter=combine:<filter1>+<filter2>+...<filterN> kann auch zur Kombination mehrerer Filter verwendet werden, ist aber schwieriger als die einfache Wiederholung des--filterFlags und normalerweise nicht notwendig. Filter werden durch + verbunden und einzelne Filter sind %-kodiert (d. h. URL-kodiert). Neben den Zeichen + und % sind die folgenden Zeichen reserviert und müssen ebenfalls kodiert werden: ~!@#$^&*()[]{}\;",<>?'` sowie alle Zeichen mit einem ASCII-Code <=0x20, was Leerzeichen und Zeilenumbrüche einschließt.Andere beliebige Zeichen können ebenfalls kodiert werden. Zum Beispiel sind
combine:tree:3+blob:noneundcombine:tree%3A3+blob%3Anoneäquivalent. --no-filter-
Schaltet jedes vorherige Argument
--filter=ab. --filter-provided-objects-
Filtert die Liste der explizit bereitgestellten Objekte, die ansonsten immer ausgegeben würden, auch wenn sie keinen der Filter entsprechen. Nur nützlich mit
--filter=. --filter-print-omitted-
Nur nützlich mit
--filter=; gibt eine Liste der vom Filter ausgelassenen Objekte aus. Objekt-IDs werden mit einem "~" Zeichen vorangestellt. --missing=<missing-action>-
Eine Debug-Option zur Unterstützung der zukünftigen Entwicklung des "Partial Clone". Diese Option gibt an, wie mit fehlenden Objekten umgegangen wird.
Die Form
--missing=errorfordert, dass rev-list mit einem Fehler abbricht, wenn ein fehlendes Objekt angetroffen wird. Dies ist die Standardaktion.Die Form
--missing=allow-anyerlaubt die Fortsetzung der Objekt-Traversierung, wenn ein fehlendes Objekt angetroffen wird. Fehlende Objekte werden stillschweigend aus den Ergebnissen ausgeschlossen.Die Form
--missing=allow-promisorist wieallow-any, erlaubt aber die Fortsetzung der Objekt-Traversierung nur für ERWARTETE promisor fehlende Objekte. Unerwartete fehlende Objekte führen zu einem Fehler.Die Form
--missing=printist wieallow-any, gibt aber auch eine Liste der fehlenden Objekte aus. Objekt-IDs werden mit einem "?" Zeichen vorangestellt.Die Form
--missing=print-infoist wieprint, gibt aber auch zusätzliche Informationen über das fehlende Objekt aus, die aus seinem enthaltenden Objekt abgeleitet werden. Alle Informationen werden auf derselben Zeile mit der fehlenden Objekt-ID in der Form ausgegeben: ?<oid> [<token>=<wert>].... Die <token>=<wert>-Paare mit zusätzlichen Informationen sind durch ein SP voneinander getrennt. Der Wert wird auf eine token-spezifische Weise kodiert, aber SP oder LF, die im Wert enthalten sind, werden immer so dargestellt, dass der resultierende kodierte Wert weder diese beiden problematischen Bytes enthält. Jedes <token>=<wert> kann eines der folgenden sein-
Der
path=<pfad> zeigt den Pfad des fehlenden Objekts an, der aus einem enthaltenden Objekt abgeleitet wird. Ein Pfad, der SP oder Sonderzeichen enthält, wird bei Bedarf in doppelten Anführungszeichen im C-Stil umschlossen. -
Der
type=<typ> zeigt den Typ des fehlenden Objekts an, der aus einem enthaltenden Objekt abgeleitet wird.
Wenn einige der für die Traversierung übergebenen Tipps fehlen, werden sie ebenfalls als fehlend betrachtet und die Traversierung ignoriert sie. Falls wir ihre Objekt-ID nicht ermitteln können, wird ein Fehler ausgelöst.
-
--exclude-promisor-objects-
(Nur für interne Verwendung.) Filtert die Objekt-Traversierung an der Promisor-Grenze vorab. Dies wird bei teilweisen Klonen verwendet. Dies ist stärker als
--missing=allow-promisor, da es die Traversierung einschränkt und nicht nur Fehler über fehlende Objekte unterdrückt. --no-walk[=(sorted|unsorted)]-
Zeigt nur die angegebenen Commits an, durchläuft aber nicht ihre Vorgänger. Dies hat keine Auswirkung, wenn ein Bereich angegeben ist. Wenn das Argument
unsortedangegeben wird, werden die Commits in der Reihenfolge angezeigt, in der sie auf der Kommandozeile eingegeben wurden. Andernfalls (wennsortedoder kein Argument angegeben wurde) werden die Commits in umgekehrt chronologischer Reihenfolge nach dem Commit-Zeitpunkt angezeigt. Kann nicht mit--graphkombiniert werden. --do-walk-
Überschreibt ein vorheriges
--no-walk.
Commit-Formatierung
Mit diesen Optionen verhält sich git-rev-list[1] ähnlich wie die spezialisiertere Familie von Commit-Protokoll-Tools: git-log[1], git-show[1] und git-whatchanged[1].
--pretty[=<format>]--format=<format>-
Gibt den Inhalt der Commit-Logs in einem bestimmten Format aus. <Format> kann eine der folgenden Optionen sein:
oneline,short,medium,full,fuller,reference,email,raw,format:<Zeichenkette> undtformat:<Zeichenkette>. Wenn <Format> keine der oben genannten ist und ein%<Platzhalter> enthält, verhält es sich, als ob--pretty=tformat:<Format> angegeben worden wäre.Siehe den Abschnitt "PRETTY FORMATS" für zusätzliche Details zu jedem Format. Wenn der Teil
=<Format> weggelassen wird, wird standardmäßigmediumverwendet.HinweisSie können das Standard-Schönheitsformat in der Repository-Konfiguration festlegen (siehe git-config[1]). --abbrev-commit-
Anstatt den vollständigen 40-stelligen hexadezimalen Commit-Objektnamen anzuzeigen, wird ein Präfix angezeigt, das das Objekt eindeutig benennt. Die Option
--abbrev=<n> (die auch die Diff-Ausgabe beeinflusst, wenn sie angezeigt wird) kann verwendet werden, um die Mindestlänge des Präfixes festzulegen.Dies sollte
--pretty=onelinefür Benutzer mit 80-stelligen Terminals wesentlich lesbarer machen. --no-abbrev-commit-
Zeigt den vollständigen 40-stelligen hexadezimalen Commit-Objektnamen an. Dies negiert
--abbrev-commit, sei es explizit oder impliziert durch andere Optionen wie--oneline. Es überschreibt auch die Variablelog.abbrevCommit. --oneline-
Dies ist eine Kurzform für die gemeinsame Verwendung von
--pretty=oneline--abbrev-commit. --encoding=<encoding>-
Commit-Objekte speichern die Zeichenkodierung, die für die Log-Nachricht in ihrem Encoding-Header verwendet wurde. Diese Option kann verwendet werden, um den Befehl anzuweisen, die Commit-Log-Nachricht in die vom Benutzer bevorzugte Kodierung zu konvertieren. Für Nicht-Plumbing-Befehle ist dies standardmäßig UTF-8. Beachten Sie, dass, wenn ein Objekt als in
Xkodiert beansprucht wird und wir inXausgeben, wir das Objekt unverändert ausgeben. Das bedeutet, dass ungültige Sequenzen im Original-Commit in die Ausgabe kopiert werden können. Ebenso, wenn iconv(3) die Konvertierung des Commits fehlschlägt, geben wir das Original-Objekt unverändert aus. --expand-tabs=<n>--expand-tabs--no-expand-tabs-
Führt eine Tabulatorerweiterung durch (ersetzt jeden Tabulator durch genügend Leerzeichen, um zur nächsten Spalte zu gelangen, die ein Vielfaches von <n> ist) in der Log-Nachricht, bevor sie in der Ausgabe angezeigt wird.
--expand-tabsist eine Kurzform für--expand-tabs=8und--no-expand-tabsist eine Kurzform für--expand-tabs=0, was die Tabulatorerweiterung deaktiviert.Standardmäßig werden Tabs in Schönheitsformaten erweitert, die die Log-Nachricht um 4 Leerzeichen einrücken (d.h.
medium, was die Standardeinstellung ist,fullundfuller). --show-signature-
Überprüft die Gültigkeit eines signierten Commit-Objekts, indem die Signatur an
gpg--verifyübergeben und die Ausgabe angezeigt wird. --relative-date-
Synonym für
--date=relative. --date=<format>-
Wirkt sich nur auf in menschenlesbarer Form angezeigte Daten aus, z. B. bei Verwendung von
--pretty. Die Konfigurationsvariablelog.datesetzt einen Standardwert für die Option--datedes Befehls log. Standardmäßig werden Daten in der ursprünglichen Zeitzone (entweder des Committer oder des Autors) angezeigt. Wenn-localan das Format angehängt wird (z. B.iso-local), wird stattdessen die lokale Zeitzone des Benutzers verwendet.--date=relativezeigt Daten relativ zur aktuellen Zeit an, z. B. "vor 2 Stunden". Die Option-localhat keine Auswirkung für--date=relative.--date=localist ein Alias für--date=default-local.--date=iso(oder--date=iso8601) zeigt Zeitstempel in einem ISO 8601-ähnlichen Format an. Die Unterschiede zum strikten ISO 8601-Format sind-
ein Leerzeichen anstelle des Trennzeichens
Tfür Datum/Uhrzeit -
ein Leerzeichen zwischen Uhrzeit und Zeitzone
-
kein Doppelpunkt zwischen Stunden und Minuten der Zeitzone
--date=iso-strict(oder--date=iso8601-strict) zeigt Zeitstempel im strikten ISO 8601-Format an.--date=rfc(oder--date=rfc2822) zeigt Zeitstempel im RFC 2822-Format an, das häufig in E-Mail-Nachrichten vorkommt.--date=shortzeigt nur das Datum, aber nicht die Uhrzeit, im FormatJJJJ-MM-TTan.--date=rawzeigt das Datum als Sekunden seit der Epoche (1970-01-01 00:00:00 UTC) an, gefolgt von einem Leerzeichen, und dann die Zeitzone als Offset von UTC (ein+oder-mit vier Ziffern; die ersten beiden sind Stunden, die zweiten beiden Minuten). D.h., als ob der Zeitstempel mitstrftime("%s%z") formatiert wäre. Beachten Sie, dass die Option-localden Wert Sekunden seit der Epoche (der immer in UTC gemessen wird) nicht beeinflusst, aber den begleitenden Zeitzonenwert umschaltet.--date=humanzeigt die Zeitzone an, wenn die Zeitzone nicht mit der aktuellen Zeitzone übereinstimmt, und gibt nicht das gesamte Datum aus, wenn dieses übereinstimmt (d.h., überspringt die Ausgabe des Jahres für Daten, die "dieses Jahr" sind, überspringt aber auch das gesamte Datum selbst, wenn es in den letzten Tagen liegt und wir nur den Wochentag angeben können). Bei älteren Daten werden auch die Stunde und Minute weggelassen.--date=unixzeigt das Datum als Unix-Epochen-Zeitstempel (Sekunden seit 1970) an. Wie bei--rawist dies immer in UTC und daher hat-localkeine Auswirkung.--date=format:<format> übergibt das <format> an diestrftimeIhres Systems, außer für%s,%zund%Z, die intern behandelt werden. Verwenden Sie--date=format:%c, um das Datum im bevorzugten Format der System-Locale anzuzeigen. Eine vollständige Liste der Formatplatzhalter finden Sie im Handbuchstrftime(3). Bei Verwendung von-localist die korrekte Syntax--date=format-local:<format>.--date=defaultist das Standardformat und basiert auf der Ausgabe von ctime(3). Es zeigt eine einzelne Zeile mit dem dreibuchstabigen Wochentag, dem dreibuchstabigen Monat, dem Tag des Monats, der Stunde-Minute-Sekunde im Format "HH:MM:SS", gefolgt vom 4-stelligen Jahr, plus Zeitzoneninformationen, es sei denn, die lokale Zeitzone wird verwendet, z.B.Do Jan 1 00:00:00 1970 +0000. -
--header-
Gibt den Inhalt des Commits im Rohformat aus; jeder Datensatz wird durch ein NUL-Zeichen getrennt.
--no-commit-header-
Unterdrückt die Kopfzeile, die "commit" und die Objekt-ID enthält, die vor dem angegebenen Format ausgegeben wird. Dies hat keine Auswirkung auf die eingebauten Formate; nur benutzerdefinierte Formate sind betroffen.
--commit-header-
Überschreibt eine vorherige
--no-commit-header-Einstellung. --parents-
Gibt auch die Eltern des Commits aus (in der Form "commit parent…"). Aktiviert auch die Umwandlung von Eltern, siehe History Simplification oben.
--children-
Gibt auch die Kinder des Commits aus (in der Form "commit child…"). Aktiviert auch die Umwandlung von Eltern, siehe History Simplification oben.
--timestamp-
Gibt den rohen Commit-Zeitstempel aus.
--left-right-
Markiert, von welcher Seite einer symmetrischen Differenz ein Commit erreichbar ist. Commits von der linken Seite werden mit einem Präfix < versehen, und die von der rechten Seite mit >. Wenn dies mit
--boundarykombiniert wird, werden diese Commits mit-präfixiert.Zum Beispiel, wenn Sie diese Topologie haben
y---b---b branch B / \ / / . / / \ o---x---a---a branch A
würde eine Ausgabe wie diese erfolgen
$ git rev-list --left-right --boundary --pretty=oneline A...B >bbbbbbb... 3rd on b >bbbbbbb... 2nd on b <aaaaaaa... 3rd on a <aaaaaaa... 2nd on a -yyyyyyy... 1st on b -xxxxxxx... 1st on a
--graph-
Zeichnet eine textbasierte grafische Darstellung der Commit-Historie auf der linken Seite der Ausgabe. Dies kann dazu führen, dass zusätzliche Zeilen zwischen den Commits gedruckt werden, damit die Graphhistorie korrekt gezeichnet werden kann. Kann nicht mit
--no-walkkombiniert werden.Dies aktiviert die Umwandlung von Eltern, siehe History Simplification oben.
Dies aktiviert standardmäßig die Option
--topo-order, aber die Option--date-orderkann ebenfalls angegeben werden. --show-linear-break[=<barrier>]-
Wenn
--graphnicht verwendet wird, werden alle Historienzweige abgeflacht, was es schwierig machen kann zu erkennen, dass zwei aufeinanderfolgende Commits nicht zu einem linearen Zweig gehören. Diese Option setzt in diesem Fall eine Barriere zwischen ihnen. Wenn <barrier> angegeben wird, ist dies der String, der anstelle des Standardstrings angezeigt wird. --count-
Gibt eine Zahl aus, die angibt, wie viele Commits aufgelistet worden wären, und unterdrückt alle anderen Ausgaben. Wenn dies zusammen mit
--left-rightverwendet wird, werden stattdessen die Anzahlen für linke und rechte Commits ausgegeben, getrennt durch einen Tabulator. Wenn dies zusammen mit--cherry-markverwendet wird, werden Patch-äquivalente Commits von diesen Anzahlen weggelassen und die Anzahl der äquivalenten Commits getrennt durch einen Tabulator ausgegeben.
SCHÖNE FORMATE
Wenn der Commit ein Merge ist und das Pretty-Format nicht oneline, email oder raw ist, wird vor der Zeile Author: eine zusätzliche Zeile eingefügt. Diese Zeile beginnt mit "Merge: " und die Hashes der Vorfahren-Commits werden durch Leerzeichen getrennt ausgegeben. Beachten Sie, dass die aufgeführten Commits nicht unbedingt die Liste der direkten Eltern-Commits sind, wenn Sie Ihre Ansicht der Historie eingeschränkt haben: z. B. wenn Sie nur an Änderungen im Zusammenhang mit einem bestimmten Verzeichnis oder einer Datei interessiert sind.
Es gibt mehrere eingebaute Formate, und Sie können zusätzliche Formate definieren, indem Sie eine `pretty.format:-Zeichenkette setzen, wie unten beschrieben (siehe git-config[1]). Hier sind die Details der integrierten Formate:
-
oneline<hash> <title-line>Dies ist so konzipiert, dass es so kompakt wie möglich ist.
-
shortcommit <hash> Author: <author><title-line>
-
mediumcommit <hash> Author: <author> Date: <author-date><title-line>
<full-commit-message>
-
fullcommit <hash> Author: <author> Commit: <committer><title-line>
<full-commit-message>
-
fullercommit <hash> Author: <author> AuthorDate: <author-date> Commit: <committer> CommitDate: <committer-date><title-line>
<full-commit-message>
-
reference<abbrev-hash> (<title-line>, <short-author-date>)
Dieses Format wird verwendet, um in einer Commit-Nachricht auf einen anderen Commit zu verweisen und ist dasselbe wie
--pretty='format:%C(auto)%h(%s,%ad). Standardmäßig wird das Datum mit--date=shortformatiert, es sei denn, eine andere Option--datewird explizit angegeben. Wie bei jedemformat:mit Formatplatzhaltern wird seine Ausgabe nicht von anderen Optionen wie--decorateund--walk-reflogsbeeinflusst. -
emailFrom <hash> <date> From: <author> Date: <author-date> Subject: [PATCH] <title-line><full-commit-message>
-
mboxrdWie
email, aber Zeilen in der Commit-Nachricht, die mit "From " beginnen (vorangestellt von null oder mehr ">"), werden mit ">" zitiert, damit sie nicht mit dem Beginn eines neuen Commits verwechselt werden. -
rawDas
raw-Format zeigt den gesamten Commit genau so an, wie er im Commit-Objekt gespeichert ist. Insbesondere werden die Hashes vollständig angezeigt, unabhängig davon, ob--abbrevoder--no-abbrevverwendet werden, und die Eltern-Informationen zeigen die tatsächlichen Eltern-Commits an, ohne Grafts oder Historienvereinfachung zu berücksichtigen. Beachten Sie, dass dieses Format die Art und Weise beeinflusst, wie Commits angezeigt werden, aber nicht, wie der Diff angezeigt wird, z. B. mitgitlog--raw. Um vollständige Objektnamen in einem rohen Diff-Format zu erhalten, verwenden Sie--no-abbrev. -
format:<Format-Zeichenkette>Das Format
format:<Format-Zeichenkette> ermöglicht es Ihnen, anzugeben, welche Informationen Sie anzeigen möchten. Es funktioniert ähnlich wie das printf-Format, mit der bemerkenswerten Ausnahme, dass Sie anstelle von \n einen Zeilenumbruch mit%nerhalten.Zum Beispiel würde format:"Der Autor von %h war %an, %ar%nDer Titel war >>%s<<%n" etwa Folgendes anzeigen:
The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
Die Platzhalter sind
-
Platzhalter, die sich zu einem einzelnen literalen Zeichen erweitern
-
Platzhalter, die die Formatierung späterer Platzhalter beeinflussen
%Cred-
Farbe auf Rot umstellen
%Cgreen-
Farbe auf Grün umstellen
%Cblue-
Farbe auf Blau umstellen
%Creset-
Farbe zurücksetzen
%C(<spec>)-
Farbspezifikation, wie unter Values im Abschnitt "CONFIGURATION FILE" von git-config[1] beschrieben. Standardmäßig werden Farben nur angezeigt, wenn sie für die Log-Ausgabe aktiviert sind (durch
color.diff,color.uioder--color, und unter Berücksichtigung derauto-Einstellungen der ersteren, wenn wir zu einem Terminal schreiben).%C(auto,<spec>) wird als historisches Synonym für das Standardverhalten akzeptiert (z.B.%C(auto,red)). Die Angabe von%C(always,<spec>) zeigt die Farben auch dann an, wenn Farben nicht anderweitig aktiviert sind (bedenken Sie jedoch, dass Sie--color=alwaysverwenden können, um Farben für die gesamte Ausgabe zu aktivieren, einschließlich dieses Formats und allem anderen, was Git färben könnte).autoallein (d.h.%C(auto)) schaltet die automatische Farbgebung für die folgenden Platzhalter ein, bis die Farbe erneut umgeschaltet wird. %m-
linke (<), rechte (>) oder Begrenzungsmarkierung (
-) %w([<w>[,<i1>[,<i2>]]])-
Zeilenumbruch umschalten, wie die Option
-wvon git-shortlog[1]. - %<(<n>[
,(trunc|ltrunc|mtrunc)]) -
Der nächste Platzhalter nimmt mindestens N Spaltenbreiten ein, wobei bei Bedarf Leerzeichen rechts aufgefüllt werden. Optional wird links (ltrunc)
..ft, in der Mitte (mtrunc)mi..leoder am Ende (trunc)rig..abgeschnitten (mit Ellipsen..), wenn die Ausgabe länger als <n> Spalten ist. Hinweis 1: Das Abschneiden funktioniert nur korrekt mit <n> >= 2. Hinweis 2: Leerzeichen um die Werte <n> und <m> (siehe unten) sind optional. Hinweis 3: Emojis und andere breite Zeichen nehmen zwei Anzeigespalten ein, was Spaltengrenzen überschreiten kann. Hinweis 4: kombinierte Zeichen von Zeichen mit diakritischen Zeichen können an Auffüllgrenzen falsch platziert werden. - %<|(<m> )
-
Der nächste Platzhalter nimmt mindestens bis zur <m>-ten Anzeigespalte ein, wobei bei Bedarf Leerzeichen rechts aufgefüllt werden. Verwenden Sie negative <m>-Werte für Spaltenpositionen, die vom rechten Rand des Terminalfensters gemessen werden.
- %>(<n>)
- %>|(<m>)
-
ähnlich wie %<(<n>), %<|(<m>), aber mit Auffüllen von Leerzeichen auf der linken Seite
- %>>(<n>)
- %>>|(<m>)
-
ähnlich wie %>(<n>), %>|(<m>), außer dass bei Bedarf Leerzeichen auf der linken Seite verwendet werden, wenn der nächste Platzhalter mehr Platz benötigt als angegeben
- %><(<n>)
- %><|(<m>)
-
ähnlich wie %<(<n>), %<|(<m>), aber mit Auffüllen auf beiden Seiten (d.h. der Text ist zentriert)
-
Platzhalter, die sich zu Informationen aus dem Commit erweitern
%H-
Commit-Hash
%h-
abgekürzter Commit-Hash
%T-
Tree-Hash
%t-
abgekürzter Tree-Hash
%P-
Eltern-Hashes
%p-
abgekürzte Eltern-Hashes
%an-
Autor-Name
%aN-
Autor-Name (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%ae-
Autor-E-Mail
%aE-
Autor-E-Mail (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%al-
Autor-E-Mail lokal-Teil (der Teil vor dem Zeichen
@) %aL-
Autor-Lokalteil (siehe
%al), beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1]) %ad-
Autor-Datum (Format beachtet die Option --date=)
%aD-
Autor-Datum, RFC2822-Stil
%ar-
Autor-Datum, relativ
%at-
Autor-Datum, UNIX-Zeitstempel
%ai-
Autor-Datum, ISO 8601-ähnliches Format
%aI-
Autor-Datum, striktes ISO 8601-Format
%as-
Autor-Datum, kurzes Format (
JJJJ-MM-TT) %ah-
Autor-Datum, menschenlesbarer Stil (wie die Option
--date=humanvon git-rev-list[1]) %cn-
Committer-Name
%cN-
Committer-Name (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%ce-
Committer-E-Mail
%cE-
Committer-E-Mail (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%cl-
Committer-E-Mail lokal-Teil (der Teil vor dem Zeichen
@) %cL-
Committer-Lokalteil (siehe
%cl), beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1]) %cd-
Committer-Datum (Format beachtet die Option --date=)
%cD-
Committer-Datum, RFC2822-Stil
%cr-
Committer-Datum, relativ
%ct-
Committer-Datum, UNIX-Zeitstempel
%ci-
Committer-Datum, ISO 8601-ähnliches Format
%cI-
Committer-Datum, striktes ISO 8601-Format
%cs-
Committer-Datum, kurzes Format (
JJJJ-MM-TT) %ch-
Committer-Datum, menschenlesbarer Stil (wie die Option
--date=humanvon git-rev-list[1]) %d-
Ref-Namen, wie die Option --decorate von git-log[1]
%D-
Ref-Namen ohne die Klammern "(", ")".
%(decorate[:<option>,...])-
Ref-Namen mit benutzerdefinierten Dekorationen. Die Zeichenkette
decoratekann gefolgt von einem Doppelpunkt und null oder mehr durch Kommas getrennten Optionen sein. Optionswerte können literale Formatierungscodes enthalten. Diese müssen für Kommas (%x2C) und schließende Klammern (%x29) verwendet werden, aufgrund ihrer Rolle in der Optionssyntax.-
prefix=<Wert>: Wird vor der Liste der Ref-Namen angezeigt. Standardmäßig " (". -
suffix=<Wert>: Wird nach der Liste der Ref-Namen angezeigt. Standardmäßig ")". -
separator=<Wert>: Wird zwischen den Ref-Namen angezeigt. Standardmäßig ",". -
pointer=<Wert>: Wird zwischen HEAD und dem Branch, auf den es zeigt (falls vorhanden), angezeigt. Standardmäßig " → ". -
tag=<Wert>: Wird vor den Tag-Namen angezeigt. Standardmäßig "tag:".
-
Zum Beispiel, um Dekorationen ohne Umbruch oder Tag-Annotationen und mit Leerzeichen als Trennzeichen zu erzeugen:
%(decorate:prefix=,suffix=,tag=,separator=)%(describe[:<option>,...])-
Menschenlesbarer Name, wie git-describe[1]; leere Zeichenkette für nicht beschreibbare Commits. Die Zeichenkette
describekann gefolgt von einem Doppelpunkt und null oder mehr durch Kommas getrennten Optionen sein. Beschreibungen können inkonsistent sein, wenn Tags gleichzeitig hinzugefügt oder entfernt werden.-
tags[=<Bool-Wert>]: Anstatt nur annotierte Tags zu berücksichtigen, werden auch Lightweight-Tags berücksichtigt. -
abbrev=<Nummer>: Anstatt die Standardanzahl von Hexadezimalziffern (die je nach Anzahl der Objekte im Repository variiert, standardmäßig 7) des abgekürzten Objektnamens zu verwenden, werden <Nummer> Ziffern verwendet, oder so viele Ziffern wie nötig, um einen eindeutigen Objektnamen zu bilden. -
match=<Muster>: Berücksichtigt nur Tags, die dem angegebenenglob(7)-Muster entsprechen, wobei der Präfixrefs/tags/ausgeschlossen ist. -
exclude=<Muster>: Berücksichtigt keine Tags, die dem angegebenenglob(7)-Muster entsprechen, wobei der Präfixrefs/tags/ausgeschlossen ist.
-
%S-
Ref-Name, der auf der Befehlszeile angegeben wurde und mit dem der Commit erreicht wurde (wie bei
gitlog--source), funktioniert nur mitgitlog %e-
Encoding
%s-
Betreffzeile
%f-
bereinigte Betreffzeile, geeignet für einen Dateinamen
%b-
Nachrichtentext
%B-
roher Nachrichtentext (ungebrochene Betreffzeile und Nachrichtentext)
%GG-
rohe Verifizierungsnachricht von GPG für einen signierten Commit
- %G?
-
zeigt "G" für eine gültige Signatur, "B" für eine ungültige Signatur, "U" für eine gültige Signatur mit unbekannter Gültigkeit, "X" für eine gültige Signatur, die abgelaufen ist, "Y" für eine gültige Signatur, die von einem abgelaufenen Schlüssel erstellt wurde, "R" für eine gültige Signatur, die von einem widerrufenen Schlüssel erstellt wurde, "E", wenn die Signatur nicht überprüft werden kann (z.B. fehlender Schlüssel) und "N" für keine Signatur.
%GS-
zeigt den Namen des Unterzeichners für einen signierten Commit an
%GK-
zeigt den verwendeten Schlüssel zum Signieren eines signierten Commits an
%GF-
zeigt den Fingerabdruck des Schlüssels an, der zum Signieren eines signierten Commits verwendet wurde
%GP-
zeigt den Fingerabdruck des primären Schlüssels an, dessen Unterschlüssel zum Signieren eines signierten Commits verwendet wurde
%GT-
zeigt die Vertrauensstufe für den zum Signieren eines signierten Commits verwendeten Schlüssel an
%gD-
Reflog-Selektor, z.B.
refs/stash@{1}oderrefs/stash@{2Minutenvor}; das Format folgt den Regeln, die für die Option-gbeschrieben sind. Der Teil vor dem@ist der Refname, wie er auf der Befehlszeile angegeben wurde (alsogitlog-grefs/heads/masterwürderefs/heads/master@{0}ergeben). %gd-
abgekürzter Reflog-Selektor; wie
%gD, aber der Refname-Teil ist zur besseren Lesbarkeit abgekürzt (alsorefs/heads/masterwird zu nurmaster). %gn-
Reflog-Identitätsname
%gN-
Reflog-Identitätsname (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%ge-
Reflog-Identitäts-E-Mail
%gE-
Reflog-Identitäts-E-Mail (beachtet .mailmap, siehe git-shortlog[1] oder git-blame[1])
%gs-
Reflog-Betreff
%(trailers[:<option>,...])-
zeigt die Trailer des Nachrichtentexts an, wie sie von git-interpret-trailers[1] interpretiert werden. Die Zeichenkette
trailerskann gefolgt von einem Doppelpunkt und null oder mehr durch Kommas getrennten Optionen sein. Wenn eine Option mehrmals angegeben wird, gewinnt die letzte Angabe.-
key=<Schlüssel>: zeigt nur Trailer mit dem angegebenen <Schlüssel> an. Die Übereinstimmung erfolgt ohne Berücksichtigung der Groß-/Kleinschreibung, und der abschließende Doppelpunkt ist optional. Wenn die Option mehrmals angegeben wird, werden Trailer-Zeilen angezeigt, die mit einem der Schlüssel übereinstimmen. Diese Option aktiviert automatisch die Optiononly, sodass Nicht-Trailer-Zeilen im Trailer-Block ausgeblendet werden. Wenn dies nicht gewünscht ist, kann es mitonly=falsedeaktiviert werden. Beispiel:%(trailers:key=Reviewed-by) zeigt Trailer-Zeilen mit dem SchlüsselReviewed-byan. -
only[=<Bool>]: wählt aus, ob Nicht-Trailer-Zeilen aus dem Trailer-Block einbezogen werden sollen. -
separator=<sep>: gibt den Trenner an, der zwischen den Trailer-Zeilen eingefügt wird. Standardmäßig ein Zeilenumbruchzeichen. Die Zeichenkette <sep> kann die oben beschriebenen literalen Formatierungscodes enthalten. Um ein Komma als Trenner zu verwenden, muss%x2Cverwendet werden, da es andernfalls als nächste Option interpretiert würde. Beispiel:%(trailers:key=Ticket,separator=%x2C) zeigt alle Trailer-Zeilen mit dem Schlüssel "Ticket" an, getrennt durch ein Komma und ein Leerzeichen. -
unfold[=<Bool>]: bewirkt, dass es sich so verhält, als ob die Option--unfoldvon interpret-trailer gegeben worden wäre. Beispiel:%(trailers:only,unfold=true) entfaltet und zeigt alle Trailer-Zeilen an. -
keyonly[=<Bool>]: zeigt nur den Schlüsselteil des Trailers an. -
valueonly[=<bool>]: Zeigt nur den Wert des Trailers an. -
key_value_separator=<sep>: Legt den Trenner fest, der zwischen Schlüssel und Wert jedes Trailers eingefügt wird. Standard ist ": ". Andernfalls gelten dieselben Semantik wie beiseparator=<sep> oben.
-
-
|
Hinweis
|
Einige Platzhalter können von anderen Optionen des Revisionsverlauf-Engines abhängen. Beispielsweise fügen die %g* Reflog-Optionen einen leeren String ein, es sei denn, wir durchlaufen Reflog-Einträge (z. B. mit git log -g). Die Platzhalter %d und %D verwenden das "kurze" Dekorationsformat, wenn --decorate nicht bereits auf der Befehlszeile angegeben wurde. |
Die booleschen Optionen akzeptieren einen optionalen Wert [=<bool-value>]. Die Werte von --type=bool in git-config[1], wie yes und off, werden alle akzeptiert. Eine boolesche Option ohne =<value> zu geben, ist gleichbedeutend damit, sie mit =true zu geben.
Wenn Sie ein + (Pluszeichen) nach dem % eines Platzhalters hinzufügen, wird unmittelbar vor der Expansion ein Zeilenumbruch eingefügt, wenn und nur wenn der Platzhalter zu einem nicht-leeren String expandiert.
Wenn Sie ein - (Minuszeichen) nach dem % eines Platzhalters hinzufügen, werden alle aufeinanderfolgenden Zeilenumbrüche unmittelbar vor der Expansion gelöscht, wenn und nur wenn der Platzhalter zu einem leeren String expandiert.
Wenn Sie ein Leerzeichen ( ) nach dem % eines Platzhalters hinzufügen, wird unmittelbar vor der Expansion ein Leerzeichen eingefügt, wenn und nur wenn der Platzhalter zu einem nicht-leeren String expandiert.
-
tformatDas
tformat:Format funktioniert genau wieformat:, bietet aber "Terminator"-Semantik anstelle von "Separator"-Semantik. Mit anderen Worten, jeder Commit erhält das Nachrichtenabschlussterminalzeichen (normalerweise ein Zeilenumbruch) angehängt, anstatt eines Separators zwischen den Einträgen. Das bedeutet, dass der letzte Eintrag eines einzeiligen Formats ordnungsgemäß mit einem Zeilenumbruch terminiert wird, genau wie das "oneline"-Format. Zum Beispiel$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973
Darüber hinaus wird jeder nicht erkannte String, der ein
%enthält, so interpretiert, als obtformat:davor stünde. Diese beiden sind zum Beispiel äquivalent$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
BEISPIELE
-
Gibt die Liste der Commits aus, die vom aktuellen Zweig aus erreichbar sind.
git rev-list HEAD
-
Gibt die Liste der Commits auf diesem Zweig aus, die aber nicht im Upstream-Zweig vorhanden sind.
git rev-list @{upstream}..HEAD -
Formatiert Commits mit ihrem Autor und ihrer Commit-Nachricht (siehe auch das Porcelain-Format von git-log[1]).
git rev-list --format=medium HEAD
-
Formatiert Commits zusammen mit ihren Diffs (siehe auch das Porcelain-Format von git-log[1], das dies in einem einzigen Prozess tun kann).
git rev-list HEAD | git diff-tree --stdin --format=medium -p
-
Gibt die Liste der Commits auf dem aktuellen Zweig aus, die eine Datei im Verzeichnis
Documentationberührt haben.git rev-list HEAD -- Documentation/
-
Gibt die Liste der Commits aus, die im vergangenen Jahr von Ihnen verfasst wurden, auf jedem Zweig, Tag oder einem anderen Ref.
git rev-list --author=you@example.com --since=1.year.ago --all
-
Gibt die Liste der Objekte aus, die vom aktuellen Zweig aus erreichbar sind (d.h., alle Commits und die Blobs und Bäume, die sie enthalten).
git rev-list --objects HEAD
-
Vergleicht die Festplattengröße aller erreichbaren Objekte mit denen, die von Reflogs erreichbar sind, und der gesamten gepackten Größe. Dies kann Ihnen sagen, ob das Ausführen von
gitrepack-addie Repository-Größe reduzieren könnte (durch das Verwerfen nicht erreichbarer Objekte) und ob das Ablaufen von Reflogs helfen könnte.# reachable objects git rev-list --disk-usage --objects --all # plus reflogs git rev-list --disk-usage --objects --all --reflog # total disk size used du -c .git/objects/pack/*.pack .git/objects/??/* # alternative to du: add up "size" and "size-pack" fields git count-objects -v
-
Berichtet über die Festplattengröße jedes Zweigs, ohne Objekte, die vom aktuellen Zweig verwendet werden. Dies kann Ausreißer finden, die zu einem aufgeblähten Repository beitragen (z.B. weil jemand versehentlich große Build-Artefakte committet hat).
git for-each-ref --format='%(refname)' | while read branch do size=$(git rev-list --disk-usage --objects HEAD..$branch) echo "$size $branch" done | sort -n
-
Vergleicht die On-Disk-Größe von Zweigen in einer Gruppe von Refs, wobei eine andere ausgeschlossen wird. Wenn Sie Objekte von mehreren Remotes in einem einzigen Repository mischen, kann dies zeigen, welche Remotes zur Repository-Größe beitragen (wobei die Größe von
originals Basis genommen wird).git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
GIT
Teil der git[1] Suite