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?

Odpowiedzi:


151

U mnie działa:

git diff master:foo foo

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

git diff foo master:foo


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.

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.


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

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ć


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.