porównać bieżącą kopię roboczą pliku z zatwierdzoną kopią innej gałęzi

158

Mam repozytorium z plikiem foow gałęzi master. Przerzuciłem się na gałąź barową i wprowadziłem kilka zmian foo. Jak mogę teraz uruchomić git diffmiędzy tą kopią (która nie została jeszcze zatwierdzona) a kopią gałęzi głównej?

Dogbert
źródło

Odpowiedzi:

151

U mnie działa:

git diff master:foo foo

W przeszłości mogło to być:

git diff foo master:foo

Mark Longair
źródło
9
Za każdym razem, gdy widzę twoją odpowiedź git diff, zawsze myślę o stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/ ...
VonC
@VonC: dzięki, miło wiedzieć, że warto było je narysować :) Nawiasem mówiąc, czy rozumiesz dziwactwo, o które zaktualizowałem moją odpowiedź?
Mark Longair
2
Czy próbowałeś --oddzielić parametry od argumentów ścieżki? git diff -- master:foo foo
VonC
1
Na 1.8, git diff -- master:foo foonie działa - wydaje się, że traktuje argument master:foojako nieistniejącą nazwę pliku (i ignoruje go) zamiast pliku-w-gałęzi. Spróbuj zmienić ostatnie 2 argumenty - jeśli zadziałało, porównanie różnic powinno zostać odwrócone, ale wynik się nie zmienia.
Kelvin,
9
Dla mnie jest odwrotnie - potrafię, git diff master:foo fooale nie odwrotnie. Ja też tego nie rozumiem. Z git 1.7.9.5 / Ubuntu 12.04 mogę przynajmniej zrobić różnicę, git diff -R master:foo fooktórej faktycznie potrzebuję. Kiedy próbuję tego z msysgit 1.9.4 / Windows 7 x64, otrzymuję fatal: unable to read 0000000000000000000000000000000000000000. Bez -Rtego otrzymuję taki sam komunikat o błędzie jak ty z gitem 1.7.9.5, ale z 1.9.4 dostaję fatal: master:foo: no such path in the working tree.
JMM
100

Próbujesz porównać swoje drzewo robocze z nazwą konkretnej gałęzi, więc chcesz tego:

git diff master -- foo

Który pochodzi z tej formy git-diff (zobacz stronę podręcznika git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Do Twojej wiadomości, istnieje również --cached(aka --staged) opcja przeglądania różnicy tego, co wystawiłeś, zamiast wszystkiego w drzewie roboczym:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.
Jordan Brough
źródło
2
Dzięki. Nie mam pojęcia dlaczego, ale tylko ta odpowiedź działała dla mnie z git 1.8.1 w Linuksie.
srking
Wspaniale, dziękuję. Rozłączyłem się z chęcią dołączenia nazwy mojej bieżącej gałęzi do polecenia diff, ale widzę, że nie jest to potrzebne.
jojo,
To działało dla mnie kilka miesięcy temu, ale teraz nie wydaje się. Obecnie korzystam z git w wersji 2.7.4 (Apple Git-66); Nie wiem, co miałem wcześniej.
hBrent
@hBrent to nadal działa dla mnie na OSX 10.11 z git 2.7.3. Oto krótkie przykładowe repozytorium z instrukcjami, jeśli jest to pomocne: github.com/jordan-brough/git-diff-test
Jordan Brough
Dzięki @JordanBrough.
hBrent
14

Również: git diff master..feature foo

Ponieważ git diff foo master:foodla mnie nie działa na katalogach.

ArtBIT
źródło
Ja też nie. Czy to kwestia systemu Windows?
Scott Stafford,
@ScottStafford Jestem na Ubuntu, więc nie, nie wydaje się, że to tylko sprawa Windowsa.
ArtBIT
Działa dla mnie, o ile wyraźnie podam nazwy obu gałęzi (okna) git diff branch1:foo master:foo
Meep
12
git difftool tag/branch filename
Adir
źródło
Jest to jedyna odpowiedź, która zadziałała w przypadku porównania między lokalną kopią roboczą pliku a tą wersją pliku w zdalnym repozytorium (nie „pochodzenia”). Dzięki, Adir i Baz
Mouse
git difftoolnie ma -vopcji zgodnie z dokumentacją git-scm.com/docs/git-difftool . Czy miałeś na myśli -y?
ks1322,
10
git diff mybranch master -- file

powinien również działać

Naoise Golden
źródło
4
Działa to tylko dla plików przekazanych do mojej gałęzi, a nie dla bieżącej kopii roboczej pliku.
jojo,
co oznacza „-” powyżej
Pushparaj
Pozwala to na porównanie w obu kierunkach: git diff deployment master -- filei git diff master deployment -- filedziałają zgodnie z oczekiwaniami z dowolnymi 2 gałęziami .
viktorkho
0

Aby zobaczyć lokalne zmiany w porównaniu z obecnym oddziałem

git diff .

Aby zobaczyć zmiany lokalne w porównaniu z innymi istniejącymi oddziałami

git diff <branch-name> .

Aby zobaczyć zmiany w określonym pliku

git diff <branch-name> -- <file-path>

Upewnij się, że biegniesz git fetchna początku.

kta
źródło