git log A..B (zwei Punkte)
Während diese Syntax wie ein "Bereich" von Commits von A nach B aussieht, ist sie eigentlich eine Kurzform für git log ^A B
:
- zeige alle von B erreichbaren Commits an; B selbst ist enthalten
- ausgenommen diejenigen, die von A aus erreichbar sind; A selbst ist ausgeschlossen
In Anbetracht der folgenden Geschichte (mit den ältesten Commits links, dem neuesten rechts):
*--*--*--A--*--*--*--B
git log A..B
zeigt alle Commits rechts von A an.
Beachten Sie, dass dies git log A..
äquivalent zu ist git log A..HEAD
.
git log A ... B (drei Punkte)
Die git-rev-list-Manpage beschreibt dies als eine spezielle Notation für "symmetric difference".
Es ist äquivalent zu git log A B --not $(git merge-base --all A B)
.
Im Klartext bedeutet dies "alle Commits, die entweder von A oder B, aber nicht von beiden erreichbar sind.
Doppelpunkt
Die gebräuchlichste Bereichsangabe ist die Doppelpunktsyntax. Dies fordert Git grundsätzlich auf, eine Reihe von Festschreibungen aufzulösen, die von einer Festschreibung aus erreichbar, von einer anderen jedoch nicht erreichbar sind. Angenommen, Sie haben einen Commit-Verlauf, der wie folgt aussieht:
Sie möchten sehen, was sich in Ihrem Experimentzweig befindet, das noch nicht in Ihrem Masterzweig zusammengeführt wurde. Sie können Git bitten, Ihnen nur die Commits mit master..experiment zu protokollieren. Dies bedeutet, dass alle Commits durch Experimente erreichbar sind, die von master nicht erreicht werden können Verwenden Sie die Buchstaben der Festschreibungsobjekte aus dem Diagramm anstelle der tatsächlichen Protokollausgabe in der Reihenfolge, in der sie angezeigt würden:
$ git log master..experiment
D
C
Wenn Sie andererseits das Gegenteil sehen möchten - alle Commits im Master, die nicht im Experiment sind - können Sie die Zweignamen umkehren. experiment..master zeigt dir alles in master, was vom experiment aus nicht erreichbar ist:
$ git log experiment..master
F
E
Dies ist nützlich, wenn Sie den Testzweig auf dem neuesten Stand halten und eine Vorschau der Zusammenführung anzeigen möchten. Eine weitere sehr häufige Verwendung dieser Syntax besteht darin, herauszufinden, was auf eine Fernbedienung übertragen werden soll:
$ git log origin/master..HEAD
Dieser Befehl zeigt Ihnen alle Festschreibungen in Ihrem aktuellen Zweig an, die sich nicht im Hauptzweig auf Ihrer Ursprungsfernbedienung befinden. Wenn Sie einen Git-Push ausführen und Ihr aktueller Zweig Herkunft / Master verfolgt, sind die Commits, die nach Herkunft / Master des Git-Protokolls aufgelistet sind, die Commits, die an den Server übertragen werden. Sie können auch eine Seite der Syntax weglassen, damit Git HEAD übernimmt. Sie können beispielsweise die gleichen Ergebnisse wie im vorherigen Beispiel erzielen, indem Sie git log origin / master eingeben. - Git ersetzt HEAD, wenn eine Seite fehlt.
Mehrere Punkte
Die Doppelpunktsyntax ist als Kurzform nützlich. Vielleicht möchten Sie jedoch mehr als zwei Zweige angeben, um Ihre Revision anzuzeigen, z. B. um festzustellen, welche Commits sich in einem von mehreren Zweigen befinden, die sich nicht in dem Zweig befinden, in dem Sie sich gerade befinden. Mit Git können Sie dies tun, indem Sie entweder das Zeichen ^ oder --nicht vor einem Verweis verwenden, von dem aus Sie keine erreichbaren Commits sehen möchten. Somit sind diese drei Befehle äquivalent:
$ git log refA..refB
$ git log ^refA refB
$ git log refB --not refA
Das ist schön, weil Sie mit dieser Syntax mehr als zwei Referenzen in Ihrer Abfrage angeben können, was mit der Doppelpunktsyntax nicht möglich ist. Wenn Sie beispielsweise alle Commits anzeigen möchten, die von refA oder refB, aber nicht von refC aus erreichbar sind, können Sie Folgendes eingeben:
$ git log refA refB ^refC
$ git log refA refB --not refC
Dies ergibt ein sehr leistungsfähiges Revisionsabfragesystem, mit dessen Hilfe Sie herausfinden können, was sich in Ihren Filialen befindet.
Triple Dot
Die letzte Hauptsyntax für die Bereichsauswahl ist die Triple-Dot-Syntax, die alle Festschreibungen angibt, die von einer der beiden Referenzen, jedoch nicht von beiden erreicht werden können. Schauen Sie sich den Commit-Verlauf in folgendem Beispiel an:
Wenn Sie sehen möchten, was sich in master oder experiment befindet, aber keine allgemeinen Referenzen haben, können Sie ausführen
$ git log master...experiment
F
E
D
C
Wiederum erhalten Sie eine normale Protokollausgabe, es werden jedoch nur die Festschreibungsinformationen für diese vier Festschreibungen angezeigt, die in der herkömmlichen Reihenfolge der Festschreibungsdaten angezeigt werden.
Ein häufiger Schalter für den Befehl log in diesem Fall ist --left-right, der anzeigt, auf welcher Seite des Bereichs sich die einzelnen Commits befinden. Dadurch werden die Daten nützlicher:
$ git log --left-right master...experiment
< F
< E
> D
> C
Mit diesen Tools können Sie Git viel einfacher mitteilen, welche Commits oder Commits Sie überprüfen möchten.