Dato che avevo già creato queste immagini, ho pensato che valesse la pena usarle in un'altra risposta, sebbene la descrizione della differenza tra ..
(punto-punto) e ...
(punto-punto-punto) sia essenzialmente la stessa della risposta di manojlds .
Il comando in git diff
genere¹ mostra solo la differenza tra gli stati dell'albero tra esattamente due punti nel grafico di commit. Le note ..
e ...
in git diff
hanno i seguenti significati:
In altre parole, git diff foo..bar
è esattamente lo stesso di git diff foo bar
; entrambi ti mostreranno la differenza tra le punte dei due rami foo
e bar
. D'altra parte, git diff foo...bar
ti mostrerà la differenza tra la "base di unione" dei due rami e la punta di bar
. La "base di unione" è in genere l'ultimo commit in comune tra questi due rami, quindi questo comando ti mostrerà i cambiamenti che il tuo lavoro bar
ha introdotto, ignorando tutto ciò che è stato fatto foo
nel frattempo.
Questo è tutto ciò che devi sapere sul ..
e sulle ...
annotazioni git diff
. Però...
... una fonte comune di confusione qui è quella ..
e ...
significa cose leggermente diverse quando usate in un comando come quello git log
che si aspetta un insieme di commit come uno o più argomenti. (Tutti questi comandi finiscono per utilizzare git rev-list
per analizzare un elenco di commit dai loro argomenti.)
Il significato di ..
e ...
per git log
può essere mostrato graficamente come di seguito:
Quindi, git rev-list foo..bar
ti mostra tutto sul ramo bar
che non è anche sul ramo foo
. D'altra parte, git rev-list foo...bar
ti mostra tutti i commit che sono in uno foo
o bar
, ma non in entrambi . Il terzo diagramma mostra solo che se si elencano i due rami, si ottengono i commit che si trovano in uno o entrambi.
Bene, trovo che sia un po 'confuso, comunque, e penso che i diagrammi del grafico di commit aiutino :)
¹ Dico solo "tipicamente" poiché, ad esempio, quando si risolvono i conflitti di unione, git diff
viene mostrata un'unione a tre vie.
..
e...
ingit diff
e i loro diversi significati ingit log
.