Jak porównać pliki z dwóch różnych gałęzi?

Mam skrypt, który działa dobrze w jednej gałęzi i jest zepsuty w innej. Chcę spojrzeć na dwie wersje obok siebie i zobaczyć, co się różni. Są na to jakieś sposoby?

Dla jasności nie szukam narzędzia do porównywania (używam Beyond Compare). Szukam polecenia git diff, które pozwoli mi porównać wersję master z bieżącą wersją gałęzi, aby zobaczyć, co się zmieniło. Nie jestem w trakcie połączenia. Chcę tylko powiedzieć coś w stylu

git diff mybranch/myfile.cs master/myfile.cs
 1134
Author: Vadim Kotov, 2010-11-04

8 answers

git diff może pokazać różnicę między dwoma commitami:

git diff mybranch master -- myfile.cs

Lub równoważnie:

git diff mybranch..master -- myfile.cs

Używając tej ostatniej składni, jeśli obie strony są {[3] } , można ją pominąć (np. master.. porównuje master do HEAD).

Możesz być również zainteresowany mybranch...master (od git diff docs):

Ten formularz ma na celu wyświetlenie zmian na gałęzi zawierającej i do drugiej <commit>, zaczynając od wspólnego przodka obu <commit>. git diff A...B jest równoważne git diff $(git-merge-base A B) B.

Innymi słowy, da to różnicę zmian w master, ponieważ odbiegała od mybranch (ale bez nowych zmian od tego czasu w mybranch).


We wszystkich przypadkach separator -- przed nazwą pliku wskazuje koniec FLAG linii poleceń. Jest to opcjonalne, chyba że Git się pomyli, jeśli argument odnosi się do commita lub pliku, ale włączenie go nie jest złym nawykiem. Zobacz https://stackoverflow.com/a/13321491/54249 dla kilku przykłady.


Te same argumenty można przekazać do git difftool, jeśli masz taki skonfigurowany.

 1643
Author: dahlbyk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:39

Możesz to zrobić: git diff branch1:file branch2:file

Jeśli masz skonfigurowany difftool, możesz także: git difftool branch1:file branch2:file

Pytanie powiązane: Jak wyświetlić wyjście git diff z visual diff program

 320
Author: Tim Henigan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:36

Bardziej współczesna składnia:

git diff ..master path/to/file

Przedrostek podwójnej kropki oznacza "od bieżącego katalogu roboczego do". Można też powiedzieć:

  • master.., czyli odwrotność powyższego. To jest to samo co master.
  • mybranch..master, jawnie odwołuje się do stanu innego niż obecne drzewo robocze.
  • v2.0.1..master, czyli odwoływanie się do znacznika.
  • [refspec]..[refspec], W zasadzie wszystko, co można zidentyfikować jako stan kodu dla git.
 128
Author: Joe Atzberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 00:41:48

Istnieje wiele sposobów porównywania plików z dwóch różnych gałęzi:

  • Opcja 1: jeśli chcesz porównać Plik z N konkretnej gałęzi do innej konkretnej gałęzi:

    git diff branch1name branch2name path/to/file
    

    przykład:

    git diff mybranch/myfile.cs mysecondbranch/myfile.cs
    

    W tym przykładzie porównujesz plik w gałęzi "mybranch" do plik w gałęzi "mysecondbranch".

  • Opcja 2: Proste sposób:

     git diff branch1:file branch2:file
    

    przykład:

     git diff mybranch:myfile.cs mysecondbranch:myfile.cs
    

    Ten przykład jest podobny do opcji 1.

  • Opcja 3: jeśli chcesz porównać bieżący katalog roboczy z jakąś gałęzią:

    git diff ..someBranch path/to/file
    

    przykład:

    git diff ..master myfile.cs
    

    W tym przykładzie porównujesz Plik z aktualnej gałęzi do plik w gałęzi master.

 9
Author: Javier C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 07:46:11

I simply do git diff branch1 branch2 path/to/file

To sprawdza różnice między plikami. Zmiany w branch1 będą na Czerwono. Zmiany w branch2 będą na Zielono.

Zakłada się, że branch1 jest przeszłością, a branch2 przyszłością. Możesz to odwrócić, odwracając kolejność gałęzi w różnicy: git diff branch2 branch1

 8
Author: iGbanam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-22 14:14:47

Zgadzam się z odpowiedzią zaproponowaną przez @ dahlbyk. Jeśli chcesz, aby różnice były zapisywane do pliku różnic w celu sprawdzenia kodu, użyj następującego polecenia.

git diff branch master -- filepath/filename.extension > filename.diff --cached
 2
Author: Azad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 07:19:54

Najlepszym sposobem jest użycie git diff w następujący sposób: git diff <source_branch> <target_branch> -- file_path

Sprawdzi różnicę między plikami w tych gałęziach. Zajrzyj do tego artykułu, aby dowiedzieć się więcej o komend git i ich działaniu.

 0
Author: Nesha Zoric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-07 12:18:24

W celu porównania dwóch plików w Git bash należy użyć polecenia:

git diff <Branch name>..master -- Filename.extension   

To polecenie pokaże różnicę między dwoma plikami w samej powłoce bash.

 0
Author: Rishav_SO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 13:50:21