Bei einigen Git-Befehlen werden Festschreibungsbereiche verwendet. Eine gültige Syntax besteht darin, zwei Festschreibungsnamen durch zwei Punkte zu trennen. ..
und eine andere Syntax verwendet drei Punkte ...
.
Was sind die Unterschiede zwischen den beiden?
Es hängt davon ab, ob Sie einen Befehl log
oder einen Befehl diff
verwenden. In dem Fall log
ist es in dem Fall man git-rev-parse
Dokumentation:
Um von einem Commit erreichbare Commits auszuschließen, wird eine Präfixnotation verwendet. Z.B. ^ r1 r2 bedeutet Commits, die von r2 aus erreichbar sind, schließt jedoch diejenigen aus, die von r1 aus erreichbar sind.
Diese Set-Operation erscheint so oft, dass es eine Kurzform dafür gibt. Wenn Sie zwei Commits r1 und r2 haben (benannt nach der oben in SPECIFYING REVISIONS erläuterten Syntax), können Sie nach Commits fragen, die von r2 aus erreichbar sind, mit Ausnahme von Commits, die von r1 aus mit "^ r1 r2" erreichbar sind, und es kann geschrieben werden als "r1..r2".
Eine ähnliche Notation "r1 ... r2" wird als symmetrische Differenz von r1 und r2 bezeichnet und als "r1 r2 - not $ (Git-Merge-Base - all r1 r2)" definiert. Es ist die Menge von Commits, die entweder von r1 oder r2 aus erreichbar sind, aber nicht von beiden.
Das bedeutet im Grunde, dass Sie alle Commits erhalten, die sich in einem der beiden Zweige befinden, aber nicht in beiden.
Im diff
Fall ist es im man git-diff
Dokumentation:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
Welches ist ein bisschen unscharf. Grundsätzlich bedeutet dies, dass nur die Unterschiede in diesem Zweig im Vergleich zu einem anderen Zweig angezeigt werden: Es wird nach dem letzten gemeinsamen Commit mit dem ersten Commit gesucht, das Sie angegeben haben, und das zweite Commit wird danach verglichen. Auf einfache Weise können Sie feststellen, welche Änderungen in diesem Zweig im Vergleich zu diesem Zweig vorgenommen wurden, ohne Änderungen nur in diesem Zweig zu berücksichtigen.
Das ..
ist etwas einfacher: In der git-diff
Fall, es ist das gleiche wie ein git diff A B
und unterscheidet nur A gegen B. Im Fall log
werden alle Festschreibungen angezeigt, die in B, aber nicht in A enthalten sind.
Wenn Sie Festschreibungsbereiche wie ..
Und ...
Mit git log
Verwenden, besteht der Unterschied zwischen ihnen darin, dass für die Zweige A und B
git log A..B
zeigt Ihnen alle Commits, die B hat, die A nicht hat , während
git log A...B
zeigt Ihnen beides die Commits, die A und B haben, und die Commits, die B hat dass A nicht hat, oder mit anderen Worten , es filtert alle Commits heraus, die sowohl A als auch B gemeinsam haben, und zeigt somit nur die Commits an, die sie nicht tun beide teilen .
Hier ist eine visuelle Darstellung von git log A..B
. Die in Zweig B enthaltenen Festschreibungen, die in A nicht vorhanden sind, werden vom Festschreibungsbereich zurückgegeben und im Venn-Diagramm rot hervorgehoben und im Festschreibungsbaum blau eingekreist:
Dies sind die Diagramme für git log A...B
. Beachten Sie, dass die Commits, die shared von beiden Zweigen stammen, vom Befehl nicht zurückgegeben werden:
...
Nützlicher machenSie können den Dreifachpunkt-Festschreibungsbereich ...
In einem Protokollbefehl nützlicher machen, indem Sie die Option --left-right
Verwenden, um anzuzeigen, welche Festschreibungen zu welchem Zweig gehören:
$ git log --oneline --decorate --left-right --graph master...Origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (Origin/master, Origin/HEAD) Add hello.txt
In der obigen Ausgabe sehen Sie, dass den Commits, die zu master
gehören, <
Vorangestellt wird, während Commits, die zu Origin/master
Gehören, >
Vorangestellt wird. .
Eines Tages könnte ich meine eigene Erklärung hinzufügen, wie die Festschreibungsbereiche mit git diff
Funktionieren, aber für den Moment möchten Sie vielleicht Folgendes überprüfen: Was sind die Unterschiede zwischen dem Doppelpunkt ".." und dem Dreifachpunkt ".."?) Punkt "..." in Git Diff Commit Bereichen? .