Ponieważ już stworzyłem te obrazy, pomyślałem, że warto je wykorzystać w innej odpowiedzi, chociaż opis różnicy między ..(kropka-kropka) a ...(kropka-kropka-kropka) jest zasadniczo taki sam jak w odpowiedzi manojldsa .
Polecenie git diffzazwyczaj pokazuje tylko różnicę między stanami drzewa między dokładnie dwoma punktami na wykresie zatwierdzenia. Te ..i ...notacje w git diffmają następujące znaczenie:

Innymi słowy, git diff foo..barjest dokładnie taki sam jakgit diff foo bar ; oba pokażą różnicę między końcami dwóch gałęzi fooi bar. Z drugiej strony git diff foo...barpokaże Ci różnicę między „bazą scalającą” dwóch gałęzi a wierzchołkiem bar. „Baza scalania” jest zwykle ostatnim wspólnym zatwierdzeniem między tymi dwiema gałęziami, więc to polecenie pokaże ci zmiany, które wprowadziła twoja praca bar, ignorując wszystko, co zostało zrobione foow międzyczasie.
To wszystko, co trzeba wiedzieć o ..i ...notacje w git diff. Jednak...
... częstym źródłem zamieszania jest tutaj .. i ...myśli subtelnie różne rzeczy, gdy używany w poleceniu takich jak git log, który oczekuje zestaw zobowiązuje jak jeden lub więcej argumentów. (Wszystkie te polecenia kończą się git rev-listna analizie listy zatwierdzeń z ich argumentów).
Znaczenie ..i... dla git logmożna przedstawić graficznie, jak poniżej:

Tak, git rev-list foo..barpokazuje wszystko na oddział bar, który nie jest również na oddziale foo. Z drugiej strony git rev-list foo...barpokazuje wszystkie zatwierdzenia, które są w jednym foo lub bar , ale nie w obu . Trzeci diagram pokazuje tylko, że jeśli wypiszesz dwie gałęzie, otrzymasz zatwierdzenia, które są w jednym lub obu z nich.
Cóż, w każdym razie wydaje mi się to trochę mylące i myślę, że diagramy wykresów zatwierdzania pomagają :)
¹ Mówię tylko „zwykle”, ponieważ na przykład przy rozwiązywaniu konfliktów scalania git diffwyświetli się trójstronne połączenie.
..i...wgit diffi ich różne znaczenia wgit log.