Jakie są różnice między następującymi poleceniami?:
git diff foo master # a
git diff foo..master # b
git diff foo...master # c
Podręcznik diff mówi o tym:
Porównywanie gałęzi
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
- Zmiany między wskazówkami tematu i gałęziami wzorcowymi.
- Tak samo jak powyżej.
- Zmiany, które wystąpiły w gałęzi głównej od momentu uruchomienia gałęzi tematu.
ale nie jest dla mnie całkowicie jasne.
..
i...
wgit diff
i ich różne znaczenia wgit log
.Odpowiedzi:
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 diff
zazwyczaj pokazuje tylko różnicę między stanami drzewa między dokładnie dwoma punktami na wykresie zatwierdzenia. Te..
i...
notacje wgit diff
mają następujące znaczenie:Innymi słowy,
git diff foo..bar
jest dokładnie taki sam jakgit diff foo bar
; oba pokażą różnicę między końcami dwóch gałęzifoo
ibar
. Z drugiej stronygit diff foo...bar
pokaże Ci różnicę między „bazą scalającą” dwóch gałęzi a wierzchołkiembar
. „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 pracabar
, ignorując wszystko, co zostało zrobionefoo
w międzyczasie.To wszystko, co trzeba wiedzieć o
..
i...
notacje wgit diff
. Jednak...... częstym źródłem zamieszania jest tutaj
..
i...
myśli subtelnie różne rzeczy, gdy używany w poleceniu takich jakgit log
, który oczekuje zestaw zobowiązuje jak jeden lub więcej argumentów. (Wszystkie te polecenia kończą sięgit rev-list
na analizie listy zatwierdzeń z ich argumentów).Znaczenie
..
i...
dlagit log
można przedstawić graficznie, jak poniżej:Tak,
git rev-list foo..bar
pokazuje wszystko na oddziałbar
, który nie jest również na oddzialefoo
. Z drugiej stronygit rev-list foo...bar
pokazuje wszystkie zatwierdzenia, które są w jednymfoo
lubbar
, 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 diff
wyświetli się trójstronne połączenie.źródło
git diff
diagramy, które przygotuję później...
i...
odczucia odwrócone wgit diff
(w porównaniu dogit rev-list
)!git diff foo..bar
jest dokładnie taki sam jakgit diff foo bar
; oba pokażą różnicę między końcami dwóch gałęzi foo i paska”. Co dokładnie rozumiesz przez „różnicę między końcami dwóch gałęzi”?Moja skonsolidowana wersja .. vs ... z diff vs log
źródło
..
/...
stuff. Na przykładlog A...B
nie jest jasne, czy polecenie zwraca przecięcie (biała część diagramu), czy resztę związku AB (zielony). Byłoby to bardziej do rzeczy bez żadnych ustawionych argumentów i tylko z jednym kolorem.diff A..B
<—>log A...B
, czyli czy naprawdę różni się 2 kropkami, odpowiada logowi z 3 (!) Kropkami? Czy na zdjęciu jest literówka. Patrząc na to, jak kropki są oznaczone kolorami, wydaje mi się, że na zdjęciu jest literówka. Lewy dolny róg:log A...B
powinien byćlog A..B
, prawy (?). I log tylko w prawo powinno być...
nie..
.git diff foo master
Różnica między górnymi (główkami) zatwierdzeniami foo i master.git diff foo..master
Kolejny sposób na zrobienie tego samego.git diff foo...master
Różni się od wspólnego przodka (git merge-base foo master
) foo i master do tip mistrza. Innymi słowy, pokazuje tylko zmiany, które gałąź master wprowadziła od swojego wspólnego przodka z foo.Ten przykład z GitHub wyjaśnia, kiedy użyć dwóch:
źródło
pokaże różnice między tematem a gałęzią master w danym momencie
pokaże to również różnice między tematem a gałęzią master w tym momencie
pokaże to wszystkie różnice między momentem utworzenia tematu z oddziału a później
więc pierwsze 2 polecenia są takie same, a ostatnie pokazuje po prostu szerszy widok w historii różnic
źródło
Górne zdjęcie odpowiada drzewku dolnego wykresu
Obraz jest wart tysiąca słów, różnica między nimi
..
...
^
jest pokazana poniżej.źródło