Da ich diese Bilder bereits erstellt hatte, dachte ich, dass es sich lohnen könnte, sie in einer anderen Antwort zu verwenden, obwohl die Beschreibung des Unterschieds zwischen ..
(Punkt-Punkt) und ...
(Punkt-Punkt-Punkt) im Wesentlichen dieselbe ist wie in der Antwort von manojlds .
Der git diff
Befehl¹ zeigt normalerweise nur den Unterschied zwischen den Zuständen des Baums zwischen genau zwei Punkten im Festschreibungsdiagramm an. Die ..
und ...
Notationen in git diff
haben folgende Bedeutung:
Mit anderen Worten, git diff foo..bar
ist genau das gleiche wie git diff foo bar
; beide zeigen Ihnen den Unterschied zwischen den Spitzen der beiden Zweige foo
und bar
. Auf der anderen Seite git diff foo...bar
wird Ihnen der Unterschied zwischen der "Zusammenführungsbasis" der beiden Zweige und der Spitze von angezeigt bar
. Die "Zusammenführungsbasis" ist normalerweise das letzte gemeinsame Commit zwischen diesen beiden Zweigen. Dieser Befehl zeigt Ihnen also die Änderungen an, an denen Ihre Arbeit vorgenommen bar
hat, und ignoriert alles, was foo
in der Zwischenzeit vorgenommen wurde.
Das ist alles, was Sie über die ..
und ...
Notationen in wissen müssen git diff
. Jedoch...
... eine häufige Quelle der Verwirrung ist, dass ..
und ...
bedeutet subtil unterschiedliche Dinge, wenn sie in einem Befehl verwendet werden git log
, der eine Reihe von Commits als ein oder mehrere Argumente erwartet. (Diese Befehle werden alle verwendet git rev-list
, um eine Liste von Commits anhand ihrer Argumente zu analysieren.)
Die Bedeutung von ..
und ...
für git log
kann wie folgt grafisch dargestellt werden:
So git rev-list foo..bar
zeigt Ihnen alles , was auf dem Zweig bar
, der nicht auch auf einem Ast ist foo
. git rev-list foo...bar
Zeigt Ihnen andererseits alle Commits an, die in einem foo
oder bar
, aber nicht in beiden enthalten sind . Das dritte Diagramm zeigt nur, dass Sie, wenn Sie die beiden Zweige auflisten, die Commits erhalten, die sich in einem oder beiden befinden.
Nun, ich finde das sowieso alles ein bisschen verwirrend und ich denke, die Commit-Diagramme helfen :)
¹ Ich sage nur "typisch", da beim Lösen von Zusammenführungskonflikten beispielsweise git diff
eine Drei-Wege-Zusammenführung angezeigt wird.
..
und...
ingit diff
und ihre unterschiedlichen Bedeutungen ingit log
.