Bei einem Zweig möchte ich eine Liste der Commits sehen, die nur in diesem Zweig vorhanden sind. In dieser Frage diskutieren wir Möglichkeiten, um festzustellen, welche Commits sich in einem Zweig befinden, jedoch nicht in einem oder mehreren bestimmten anderen Zweigen.
Das ist etwas anders. Ich würde gerne sehen, welche Commits sich in einem Zweig befinden, aber nicht in einem anderen Zweig.
Der Anwendungsfall liegt in einer Verzweigungsstrategie, bei der einige Zweige nur zusammengeführt und niemals direkt festgeschrieben werden sollten. Dies würde verwendet, um zu überprüfen, ob Commits direkt in einem "Nur-Zusammenführen" -Zweig vorgenommen wurden.
BEARBEITEN: Im Folgenden finden Sie Schritte zum Einrichten eines Dummy-Git-Repos zum Testen:
git init
echo foo1 >> foo.txt
git add foo.txt
git commit -am "initial valid commit"
git checkout -b merge-only
echo bar >> bar.txt
git add bar.txt
git commit -am "bad commit directly on merge-only"
git checkout master
echo foo2 >> foo.txt
git commit -am "2nd valid commit on master"
git checkout merge-only
git merge master
Es sollte nur das Commit mit der Meldung "Bad Commit direkt bei Nur-Zusammenführung" angezeigt werden, das direkt im Nur-Zusammenführungs-Zweig ausgeführt wurde.
git log ^branch1 ^branch2 merge-only-branch
Syntax verwenden?git log ^branch1 ^branch2 merge-only-branch
erfordert die Auflistung jedes einzelnen Zweigs. Das kann mit einer cleveren Verwendung von Bash / Grep vermieden werden (siehe meine Antwort unten), aber ich hoffe, dass Git eine eingebaute Unterstützung dafür hat. Sie haben Recht, dass davon ausgegangen wird, dass alle Merge-From-Zweige entfernt sind (nur lokal sind für andere Entwickler so gut wie nicht vorhanden). Bei der Verwendung werden--no-merges
alle Commits weggelassen, die zusammengeführt wurden und deren ursprünglicher Merge-From-Zweig gelöscht wurde. Dies setzt also voraus, dass die Merge-From-Zweige so lange beibehalten werden, bis sie zu einem Nicht-Merge-Only-Zweig (dh Master) zusammengeführt wurden.Antworten:
Wir haben gerade diese elegante Lösung gefunden
In Ihrem Beispiel wird das anfängliche Commit natürlich immer noch angezeigt.
Diese Antwort beantwortet die Frage nicht genau, da das anfängliche Commit immer noch angezeigt wird. Andererseits scheinen viele Leute, die hierher kommen, die Antwort zu finden, nach der sie suchen.
quelle
initial valid commit
, welcher Teil sowohl der istmerge-only
undmaster
Zweige. Wenn man sich jedoch die Mühe macht, den aktuellen Zweignamen am Ende gefolgt von den mit ^ vorangestellten Zweignamen einzugeben, von denen man weiß, dass der aktuelle Zweig stammt, löst dies die Hälfte der Probleme (ausgenommen Dinge, die zusammengeführt wurden). Beispiel:git log --first-parent --no-merges merge-only ^master
git log --first-parent --no-merges | grep <branch_name>
Mit freundlicher Genehmigung meines lieben Freundes Redmumba :
... wo
origin/merge-only
ist Ihr Filialname für die Remote-Zusammenführung? Bei Arbeiten an einem nur lokalen git Repo, Ersatzrefs/remotes/origin
mitrefs/heads
und Ersatz Fernzweignamenorigin/merge-only
mit lokalen Zweignamenmerge-only
, das heißt:quelle
git for-each-ref
diese Option, um jeden Referenznamen im Ursprunggrep -v
aufzulisten und den Nur-Zusammenführungs-Zweig wegzulassen.git log
nimmt eine--not
Option, an die wir unsere Liste aller Verweise übergeben (mit Ausnahme des Nur-Zusammenführungs-Zweigs). Wenn Sie eine elegantere Antwort auf das Problem haben, lassen Sie es uns hören./*
in dengit for-each-refs
Befehlen verlassen sich auf nicht einige vorhandene Datei passende und nicht mitfailglob
odernullglob
Satz ( bash - Optionen, andere Schalen variieren). Sie sollten entweder die Sternchen zitieren / entkommen oder einfach das Nachlassen/*
weglassen (git for-each-ref
Muster können „von Anfang an bis zu einem Schrägstrich“ übereinstimmen). Verwenden Siegrep -Fv refs/remotes/origin/foo
(refs/heads/foo
) möglicherweise , um genauer zu bestimmen, welche Refs entfernt werden.git log --no-merges B1 --not B2
wobei B1 der Zweig ist, an dem Sie interessiert sind, und B2 der Zweig ist, mit dem Sie B1 vergleichen möchten. Sowohl B1 als auch B2 können lokale oder entfernte Zweige sein, daher können Siegit log --no-merges master --not origin/master
zwei entfernte Zweige angeben oder sogar angeben.Dies zeigt Ihnen alle in Ihrer Niederlassung vorgenommenen Commits.
quelle
origin/branchName
zeigt auf den Kopf des Remote-Zweigs UNDHEAD
auf das Commitid des letzten lokalen Commits in diesem Zweig. Dies funktioniert also nicht, wenn Sie Git Push verwendet haben.@Prakash Antwort funktioniert. Nur zur Klarheit ...
listet die Commits für den Feature-Zweig auf, nicht jedoch für den Upstream-Zweig (normalerweise Ihr Master).
quelle
Vielleicht könnte das helfen:
quelle
Versuche dies:
Grundsätzlich werden
git rev-list --all ^branch
alle Revisionen nicht im Zweig und dann alle Revisionen im Repo und subtrahieren die vorherige Liste, die die Revisionen nur im Zweig sind.Nach @ Brians Kommentaren:
Aus der Dokumentation der Git Rev-Liste:
List commits that are reachable by following the parent links from the given commit(s)
Ein Befehl wie
git rev-list A
A ist also ein Commit, der Commits auflistet, die von A einschließlich A erreichbar sind.In diesem Sinne so etwas wie
git rev-list --all ^A
listet Commits auf, die von A nicht erreichbar sind
So
git rev-list --all ^branch
werden alle Commits aufgelistet, die von der Spitze des Zweigs nicht erreichbar sind. Dadurch werden alle Commits in der Verzweigung entfernt, oder mit anderen Worten, Festschreibungen, die sich nur in anderen Verzweigungen befinden.Nun kommen wir zu
git rev-list --all --not $(git rev-list --all ^branch)
Das wird so sein
git rev-list --all --not {commits only in other branches}
Also wollen wir auflisten
all
also auflisten, von wo aus nicht erreichbar sindall commits only in other branches
Welches ist die Menge der Commits, die nur in der Verzweigung sind. Nehmen wir ein einfaches Beispiel:
Hier ist das Ziel, D und E zu bekommen, die Commits in keinem anderen Zweig.
git rev-list --all ^branch
gib nur B.Darauf
git rev-list --all --not B
kommen wir jetzt an. Was auch istgit rev-list -all ^B
- wir wollen, dass alle Commits nicht von B aus erreichbar sind. In unserem Fall sind es D und E. Was wollen wir?Hoffe das erklärt, wie der Befehl richtig funktioniert.
Nach Kommentar bearbeiten:
Wenn Sie nach den oben genannten Schritten ein
git rev-list --all --not $(git rev-list --all ^merge-only)
Commit ausführen, erhalten Sie das gesuchte Commit - das Commit"bad commit directly on merge-only"
.Sobald Sie jedoch den letzten Schritt in Ihren Schritten ausgeführt haben, gibt
git merge master
der Befehl nicht die erwartete Ausgabe aus. Denn ab sofort gibt es kein Commit, das nicht nur beim Zusammenführen vorhanden ist, da das eine zusätzliche Commit im Master ebenfalls zum Nur-Zusammenführen zusammengeführt wurde. Sogit rev-list --all ^branch
gibt leeres Ergebnis und damitgit rev-list -all --not $(git rev-list --all ^branch)
gibt alle Commits in Merge-only.quelle
xargs -L 1 -t git branch -a --contains
dass viele Fehlalarme angezeigt werden (Commits, die sich tatsächlich in anderen Zweigen befinden). Ich habe es mit und ohne versucht--no-merges
. Vielen Dank für Ihre Antwort!git rev-list --all ^branch
gibt Ihnen alle Commits, die nicht in sindbranch
. Sie subtrahieren das dann von der Liste, die sich in der Liste befindetbranch
. Aber per Definition sind alle Commits, die nicht inbranch
sind, nicht inbranch
, also subtrahieren Sie nichts. Was Jimmyorr sucht, sind Commits, die sich in einem anderen Zweig befinden,branch
aber nichtmaster
. Sie möchten die Commits, die nicht enthalten sind, nicht subtrahierenbranch
. Sie möchten die Commits subtrahieren, die sich in anderen Zweigen befinden.branch
, aber auchgit rev-list branch
. Sie schreiben nurgit rev-list branch
komplizierter (und langsamer). Es funktioniert nicht, die Frage zu beantworten, wie man alle Commits findetbranch
, die sich in keinem anderen Zweig befinden .Eine weitere Variation der akzeptierten Antworten, mit denen verwendet werden kann
master
git log origin/master --not $(git branch -a | grep -Fv master)
Filtern Sie alle Commits, die in einem anderen Zweig als Master ausgeführt werden.
quelle
Dies ist nicht gerade eine echte Antwort, aber ich brauche Zugriff auf die Formatierung und viel Platz. Ich werde versuchen, die Theorie hinter den beiden besten Antworten zu beschreiben: die akzeptierte und die (zumindest derzeit) bestplatzierte . Tatsächlich beantworten sie jedoch unterschiedliche Fragen .
Commits in Git werden sehr oft auf mehreren Zweigen gleichzeitig "ausgeführt". Genau darum geht es in der Frage. Gegeben:
Wenn die Großbuchstaben für tatsächliche Git-Hash-IDs stehen, suchen wir häufig nur nach Commit
H
oder nur nach CommitsI-J
in unserergit log
Ausgabe. Commits bis durchG
sind auf beiden Zweigen, daher möchten wir sie ausschließen.(Beachten Sie, dass in so gezeichneten Diagrammen neuere Commits rechts liegen. Die Namen wählen das Commit ganz rechts in dieser Zeile aus. Jedes dieser Commits verfügt über ein übergeordnetes Commit, das das Commit zu ihrer Linken ist: das übergeordnete Commit von
H
isG
und das Elternteil vonJ
istI
. Das Elternteil vonI
istG
wieder. Das Elternteil von istG
istF
undF
hat ein Elternteil, das hier einfach nicht angezeigt wird: Es ist Teil des...
Abschnitts.)Für diesen besonders einfachen Fall können wir verwenden:
sehen
I-J
, oder:anzuzeigen
H
nur. Der Name auf der rechten Seite nach den beiden Punkten sagt Git: Ja, diese Commits . Der Name auf der linken Seite vor den beiden Punkten sagt Git: Nein, nicht diese Commits . Git beginnt am Ende - beim FestschreibenH
oder FestschreibenJ
- und arbeitet rückwärts . Weitere Informationen finden Sie unter Think Like (a) Git .So wie die ursprüngliche Frage formuliert ist, besteht der Wunsch darin, Commits zu finden, die von einem bestimmten Namen aus erreichbar sind , jedoch nicht von einem anderen Namen in derselben allgemeinen Kategorie. Das heißt, wenn wir ein komplexeres Diagramm haben:
Wir könnten einen dieser Namen wie
name4
oder auswählenname3
und fragen: Welche Commits können unter diesem Namen gefunden werden, aber nicht unter einem der anderen Namen? Wenn wirname3
die Antwort auswählen , ist CommitL
. Wenn wir auswählenname4
, lautet die Antwort überhaupt keine Festschreibungen: Die Festschreibung, derenname4
Name Festschreibung,N
aber FestschreibungN
ist , kann durch Beginnen bei gefunden werdenname5
und rückwärts arbeiten.Die akzeptierte Antwort funktioniert mit Remote-Tracking-Namen anstelle von Zweigstellennamen und ermöglicht es Ihnen, einen - den buchstabierten
origin/merge-only
- als ausgewählten Namen zu bestimmen und alle anderen Namen in diesem Namespace anzuzeigen. Außerdem wird vermieden, dass Zusammenführungen angezeigt werden: Wenn wirname1
als "interessanten Namen" auswählen und " Show me Commitsname1
" auswählen , die von einem anderen Namen aus erreichbar sind, aber keinen anderen Namen haben , werden sowohl Merge CommitM
als auch reguläres Commit angezeigtI
.Die beliebteste Antwort ist ganz anders. Es geht nur um die Grafik zu begehen durchqueren , ohne folgenden beiden Beine eines Merge, und ohne zu zeigen , eine der Commits , die sind verschmilzt. Wenn wir
name1
zum Beispiel mit beginnen, werden wir nicht anzeigenM
(es ist eine Zusammenführung), aber wenn das erste übergeordnete Element der ZusammenführungM
Commit istI
, werden wir uns nicht einmal CommitsJ
und ansehenK
. Wir werden am Ende zeigt begehenI
, und verpflichtet auchH
,G
,F
, und so weiter-keines dieser sind Merge Commits und alle erreichbar sind , indem beim StartM
und nach hinten arbeiten, nur der Besuch zuerst Elternteil jeden merge zu begehen.Die beliebteste Antwort ist ziemlich gut geeignet, um beispielsweise zu prüfen,
master
wannmaster
ein Zweig nur für Zusammenführungen gedacht ist. Wenn alle "echte Arbeit" an Seitenzweigen geleistet wurde, die anschließend zusammengeführt wurdenmaster
, haben wir ein Muster wie das folgende:Dabei handelt es sich bei allen nicht mit Buchstaben versehenen
o
Commits um normale (nicht zusammengeführte) CommitsM
undN
um Zusammenführungs-Commits. CommitI
ist die erste begehen: die allererste jemals gemacht begehen, und der einzige, der sollte auf Master sein , das kein merge begehen ist. Wenn dasgit log --first-parent --no-merges master
ein anderes Commit als zeigtI
, haben wir eine Situation wie diese:wo wir sehen wollen begehen
*
dass ein direkt ausgeführt wurdemaster
, nicht durch Zusammenführen eines Feature-Zweigs.Kurz gesagt, die beliebte Antwort ist großartig, um zu sehen,
master
wannmaster
nur Zusammenführen gedacht ist, ist aber für andere Situationen nicht so gut geeignet. Die akzeptierte Antwort funktioniert für diese anderen Situationen.Sind Remote-Tracking-Namen wie
origin/master
Zweig Namen?Einige Teile von Git sagen, dass sie nicht:
sagt
on branch master
, aber:sagt
HEAD detached at origin/master
. Ich stimme lieber mitgit checkout
/git switch
: überein,origin/master
ist kein Filialname, weil man nicht "drauf" kommen kann.Die akzeptierte Antwort verwendet Remote-Tracking-Namen
origin/*
als "Filialnamen":Die mittlere Zeile, die aufgerufen wird
git for-each-ref
, durchläuft die Namen der Fernverfolgung für die benannte Fernbedienungorigin
.Der Grund, warum dies eine gute Lösung für das ursprüngliche Problem ist, ist, dass wir hier eher an den Filialnamen anderer als an unseren Filialnamen interessiert sind . Das heißt aber, wir haben Branch als etwas anderes definiert als unsere Branchennamen definiert haben . Das ist in Ordnung: Sei dir nur bewusst, dass du das tust, wenn du es tust.
git log
Durchläuft einige Teile des FestschreibungsdiagrammsWas wir hier wirklich suchen, sind Serien von dem, was ich Daglets genannt habe: siehe Was genau meinen wir mit "Zweig"? Das heißt, wir suchen nach Fragmenten innerhalb einer Teilmenge des gesamten Commit-Diagramms .
Immer wenn wir Git einen Zweignamen wie
master
, einen Tag-Namen wiev2.1
oder einen Remote-Tracking-Namen wie ansehenorigin/master
, möchten wir, dass Git uns von diesem Commit erzählt und jedem Commit , das wir von diesem Commit erhalten können: von dort aus und rückwärts arbeiten.In der Mathematik wird dies als Gehen eines Graphen bezeichnet . Gits Commit-Graph ist ein Directed Acyclic Graph oder DAG , und diese Art von Graph eignet sich besonders zum Gehen. Wenn Sie einen solchen Graphen durchlaufen, besuchen Sie jeden Graphenscheitelpunkt, der über den verwendeten Pfad erreichbar ist. Die Eckpunkte im Git-Diagramm sind die Commits, wobei die Kanten Bögen - Einwegverknüpfungen - sind, die von jedem Kind zu jedem Elternteil verlaufen. (Hier denken Sie wie (a) Git Spiel. Die Einbahnstraße von Bögen bedeutet, dass Git vom Kind zum Elternteil rückwärts arbeiten muss.)
Die beiden wichtigsten Git-Befehle für das Gehen mit Grafiken sind
git log
undgit rev-list
. Diese Befehle sind sehr ähnlich - tatsächlich werden sie meistens aus denselben Quelldateien erstellt -, aber ihre Ausgabe ist unterschiedlich:git log
Erzeugt eine Ausgabe für Menschen zum Lesen, während siegit rev-list
eine Ausgabe für andere Git-Programme erzeugt. 1 Beide Befehle führen diese Art von Graph-Walk durch.Der Graph Walk, den sie machen, ist speziell: gegeben eine Reihe von Startpunkt-Commits (möglicherweise nur ein Commit, möglicherweise eine Reihe von Hash-IDs, möglicherweise eine Reihe von Namen, die in Hash-IDs aufgelöst werden), gehen Sie durch das Diagramm und besuchen Sie Commits . Bestimmte Anweisungen, wie z. B.
--not
ein Präfix^
, oder--ancestry-path
, oder--first-parent
, ändern den Diagrammlauf auf irgendeine Weise.Während sie den Graph Walk machen, besuchen sie jedes Commit. Aber sie nur drucken jedoch eine ausgewählte Teilmenge der durchgeführten Commits. Anweisungen wie
--no-merges
oder--before <date>
teilen den Graph-Walking-Code mit, der zum Drucken verpflichtet ist .Um diesen Besuch durchzuführen, verwenden diese beiden Befehle jeweils ein Commit Prioritätswarteschlange . Sie führen
git log
odergit rev-list
und geben ihm einige Startpunkt-Commits. Sie stellen diese Commits in die Prioritätswarteschlange. Zum Beispiel ein einfaches:wandelt den Namen
master
in eine unformatierte Hash-ID um und stellt diese eine Hash-ID in die Warteschlange. Oder:wandelt beide Namen in Hash-IDs um und stellt - vorausgesetzt, es handelt sich um zwei verschiedene Hash-IDs - beide in die Warteschlange.
Die Priorität der Commits in dieser Warteschlange wird durch noch mehr Argumente bestimmt. Zum Beispiel
--author-date-order
sagt das Argumentgit log
odergit rev-list
die verwenden Autor Zeitstempel, anstatt die Committer Zeitstempel. Standardmäßig wird der Committer-Zeitstempel verwendet und das Commit nach dem neuesten Datum ausgewählt: das Commit mit dem höchsten numerischen Datum. Unter dermaster develop
Annahme, dass diese Entschlossenheit zu zwei verschiedenen Commits führt, zeigt Git an, welche später kam zuerst kam, da diese ganz vorne in der Warteschlange steht.In jedem Fall wird der Revisionslaufcode jetzt in einer Schleife ausgeführt:
--no-merges
: Drucken Sie nichts, wenn es sich um ein Zusammenführungs-Commit handelt.--before
: Drucken Sie nichts aus, wenn das Datum nicht vor der angegebenen Zeit liegt. Wenn das Drucken nicht unterdrückt wird, drucken Sie das Commit: fürgit log
, zeigen Sie das Protokoll an; zumgit rev-list
Drucken seiner Hash - ID.--first-parent
alle bis auf das erste übergeordnete Element jeder Zusammenführung unterdrückt .(Beides
git log
undgit rev-list
kann die Historie mit oder ohne Umschreiben der Eltern vereinfachen an dieser Stelle auch eine , aber das werden wir hier überspringen.)Bei einer einfachen Kette, z. B. Start bei
HEAD
und rückwärts arbeiten, wenn keine Zusammenführungs-Commits vorhanden sind, befindet sich in der Warteschlange immer ein Commit oben in der Schleife. Es gibt ein Commit, also entfernen wir es und drucken es aus, stellen sein (einzelnes) übergeordnetes Element in die Warteschlange und gehen erneut umher. Wir folgen der Kette rückwärts, bis wir das allererste Commit erreichen, oder der Benutzer hat diegit log
Ausgabe satt und wird beendet das Programm. In diesem Fall spielt keine der Bestelloptionen eine Rolle: Es muss immer nur ein Commit angezeigt werden.Wenn es Zusammenschlüsse gibt und wir beiden Elternteilen folgen - beide "Beine" des Zusammenschlusses - oder wenn Sie
git log
oder gebengit rev-list
mehr als ein Start-Commit geben, sind die Sortieroptionen wichtig.Betrachten Sie zuletzt die Auswirkung eines Commit-Spezifizierers
--not
oder^
vor diesem. Diese haben verschiedene Möglichkeiten, sie zu schreiben:oder:
oder:
alle bedeuten dasselbe. Das
--not
ist wie das Präfix,^
außer dass es für mehr als einen Namen gilt:bedeutet nicht Zweig1, nicht Zweig2, ja Zweig3; aber:
bedeutet nicht branch1, nicht branch2, nicht branch3, und Sie müssen eine Sekunde verwenden
--not
, um es auszuschalten:das ist ein bisschen umständlich. Die beiden "Nicht" -Direktiven werden über XOR kombiniert. Wenn Sie also wirklich wollen, können Sie schreiben:
bedeutet nicht branch1, nicht branch2, ja branch3 , wenn Sie verschleiern wollen .
Dies alles wirkt sich auf den Graph Walk aus. Wie
git log
odergit rev-list
die Grafik geht, macht es sicher nicht in die Priorität zu setzen Warteschlange jede verpflichten , dass aus einem der erreichbar ist negierte Referenzen. (Tatsächlich wirken sie sich auch auf das Start-Setup aus: Negierte Commits können nicht direkt über die Befehlszeile in die Prioritätswarteschlange gestellt werden undgit log master ^master
zeigen beispielsweise nichts an.)Die gesamte ausgefallene Syntax, die in der Dokumentation zu gitrevisions beschrieben ist, nutzt dies, und Sie können dies mit einem einfachen Aufruf von verfügbar machen
git rev-parse
. Zum Beispiel:Die Dreipunktsyntax bedeutet, dass Commits von links oder rechts erreichbar sind, jedoch keine Commits, die von beiden Seiten erreichbar sind . In diesem Fall ist das
origin/master
Commitb34789c0b
selbst überorigin/pu
(fc307aa37...
) erreichbar, sodass derorigin/master
Hash zweimal angezeigt wird, einmal mit einer Negation. Tatsächlich erreicht Git jedoch die Dreipunktsyntax, indem zwei positive Referenzen eingegeben werden - die beiden nicht negierten Hash-IDs - und eine negative, dargestellt durch die^
Präfix.Ähnlich:
Die
^@
Syntax bedeutet, dass allemaster^
übergeordneten Elemente des angegebenen Commits und selbst - das erste übergeordnete Element des durch den Filialnamen ausgewählten Commitsmaster
- ein Zusammenführungs-Commit sind, sodass es zwei übergeordnete Elemente hat. Das sind die beiden Eltern. Und:Das
^!
Suffix bedeutet das Commit selbst, aber keines seiner Eltern . In diesem Fallmaster^
ist0b07eecf6...
. Wir haben bereits beide Eltern mit dem^@
Suffix gesehen; hier sind sie wieder, aber diesmal negiert.1 Viele Git-Programme werden buchstäblich ausgeführt
git rev-list
mit verschiedenen Optionen ausgeführt und lesen die Ausgabe, um zu wissen, welche Commits und / oder anderen Git-Objekte verwendet werden sollen.2 Da das Diagramm azyklisch ist , kann garantiert werden, dass noch keines besucht wurde, wenn wir die Einschränkung hinzufügen, dass niemals ein Elternteil angezeigt wird, bevor alle untergeordneten Elemente der Priorität angezeigt werden.
--date-order
,--author-date-order
Und--topo-order
diese Einschränkung hinzufügen. Die Standardsortierreihenfolge - die keinen Namen hat - funktioniert nicht. Wenn die Festschreibungszeitstempel fehlerhaft sind - wenn beispielsweise einige Festschreibungen "in der Zukunft" von einem Computer vorgenommen wurden, dessen Uhr ausgeschaltet war -, kann dies in einigen Fällen zu einer seltsam aussehenden Ausgabe führen.Wenn Sie es bis hierher geschafft haben, wissen Sie jetzt viel darüber
git log
Zusammenfassung:
git log
Es geht darum, einige ausgewählte Commits anzuzeigen, während ein Teil des Diagramms ganz oder teilweise ausgeführt wird.--no-merges
Argument, das sowohl in den akzeptierten als auch in den derzeit am besten bewerteten Antworten enthalten ist, unterdrückt das Anzeigen einiger Commits, die ausgeführt werden .--first-parent
Argument aus der derzeit am höchsten bewerteten Antwort unterdrückt das Gehen einiger Teile des Diagramms während des Diagrammspaziergangs selbst.--not
Präfix für Befehlszeilenargumente, wie es in der akzeptierten Antwort verwendet wird, verhindert , dass von Anfang an einige Teile des Diagramms überhaupt besucht werden .Mit diesen Funktionen erhalten wir die gewünschten Antworten auf zwei verschiedene Fragen.
quelle