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
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żnegit 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.
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
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 comaster
. -
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.
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.
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
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
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.
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.
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