Początkowo próbowałem, git diff HEAD origin/HEADco wydaje się wskazywać na inną gałąź zdalną niż ta, którą zamierzałem. Korzystanie z pełnej nazwy oddziału działa zgodnie z oczekiwaniami.
Deanna
Odpowiedzi:
590
Aby zaktualizować oddziały zdalnego śledzenia, musisz git fetchnajpierw wpisać, a następnie:
git diff <masterbranch_path> <remotebranch_path>
Możesz git branch -awyświetlić listę wszystkich oddziałów (lokalnych i zdalnych), a następnie wybrać nazwę oddziału z listy (wystarczy usunąć remotes/z nazwy oddziału zdalnego.
Przykład: git diff master origin/master(gdzie „master” jest lokalną gałęzią master, a „origin / master” jest zdalnym mianem origin i gałąź master).
To po prostu pokazuje wgląd w zmiany w bash, czy jest jakiś sposób, aby otworzyć wszystkie zmiany w IDE, takim jak kod VS?
Harsh Phoujdar
@Harsh Phoujdar Dodaj poniższy kod do pliku .git / .gitconfig [diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = falseUpewnij się, że ścieżka do pliku code.exe jest poprawna.
Aman
1307
git diff <local branch> <remote>/<remote branch>
Na przykład git diff master origin/masterlubgit diff featureA origin/next
Oczywiście, aby mieć wspomniany oddział zdalnego śledzenia , musisz git fetchnajpierw; i potrzebujesz go, aby mieć aktualne informacje o oddziałach w zdalnym repozytorium.
Zazwyczaj robię, git diff <remote>/<remote branch> <local branch>aby zobaczyć, co zrobi mój push do zdalnego repo.
Michał Tatarynowicz,
76
Jeszcze krótszy git diff originjest wystarczający, jeśli porównasz go ze swoim odgałęzieniem.
Ludder
12
proszę dodać git fetchna początku, że powoduje to problemy początkującym jak ja
Saif,
1
Hej, prawda git diff <remote>/<remote branch> <local branch>? W przeciwnym razie dodawanie i usuwanie włącza się na moim komputerze (git wersja 2.7.0.windows.2)
Martín Coll
183
Pierwszy typ
git branch -a
aby uzyskać listę dostępnych oddziałów. Na wyjściu możesz zobaczyć coś takiego
Zdecydowanie wybrałbym to jako odpowiedź. Postępując zgodnie z Twoimi wskazówkami, mogłem zobaczyć różnice między oddziałem lokalnym a oddziałem zdalnym. Dzięki!
Tass
1
Zazwyczaj robię to, git log origin/my_branch..co będzie traktowane HEADjako lokalny referendarz, co w dużej mierze masz na myśli.
Rudie,
4
+1 za najlepszą odpowiedź według mojej skromnej opinii. Byłoby warte +2, gdybyś wspomniał o „pobieraniu”, aby zsynchronizować „zdalny” obraz sklonowanego źródła. Krok przeglądu statystyk / kolorów jest szczególnie pomocny.
bvj
3
Dzięki za jedną odpowiedź, która ostatecznie wyszła z siedmiu lub ośmiu „odpowiedzi”, które dały niewiele więcej niż fatal: bad revisionlub fatal: ambiguous argument. Chciałem tylko zobaczyć różnicę w tym samym pliku z innej gałęzi, czy to było zbyt wiele? Tak, tak było. :-) git diff remotes/origin/<base branch> <current branch> -- <filename>działa świetnie na git 1.8.3.1
Steve Bonds
143
Jeśli jesteś w danym oddziale i chcesz porównać go z odgałęzieniem, które śledzisz, użyj
git diff @{upstream}
jeśli twój upstream nie jest ustawiony (zwykle tak, dziękuję Arijoon w komentarzach)
<branchname>@{upstream}Na przykład master@{upstream}, @{u}
przyrostek
@{upstream}do BRANCHNAME (krótka forma <branchname>@{u}) odnosi się do gałęzi że gałęzi określonej przez branchnamejest opierać się na górnej części (skonfigurowane branch.<name>.remotei branch.<name>.merge). Brakuje branchnamedomyślnie bieżącej.
Bardzo dobra odpowiedź, po prostu brakuje mi części. Zmień linię na git diff @ @{upstream}. Dodatkową zaletą @jest to HEAD, gdzie jesteś teraz, więc porównujesz HEADz tym, co śledzi twoja gałąź. Możesz użyć @{push}zamiast upstream, aby uzyskać różnicę między gałęzią, do której chcesz przepchnąć
Arijoon
3
najlepsza odpowiedź, nie wymaga pobierania pilota. potrzebuje więcej pozytywnych opinii!
jcomeau_ictx
3
W ryba shell mam wynik: fatal: ambiguous argument '@upstream': unknown revision or path not in the working tree. git diff @\{upstream\}Zamiast tego musiałem użyć . 😥
Landon Kuhn
git fetchNajpierw musisz , bo to nic nie robi, nie pokazuje wyników; przetestowano, usuwając plik z początku repozytorium i uruchomiono to polecenie lokalnie. .. działa tylko po pobraniu.
Ponadto, ponieważ podana odpowiedź obejmuje wszelkie zmiany lokalne. czasami jest to pożądane, innym razem nie.
Deanna
44
Rozumiem znacznie lepiej wyniki:
git diff <remote-tracking branch> <local branch>
pokazuje mi to, co zostanie usunięte i co zostanie dodane, jeśli popchnę lokalny oddział. Oczywiście jest tak samo, tylko odwrotnie, ale dla mnie jest bardziej czytelny i bardziej komfortowo patrzę na to, co się wydarzy.
Otrzymuję dokładnie ten sam wynik z: git diff <oddział lokalny> <oddział zdalnego śledzenia> lub git diff <oddział zdalnego śledzenia> <oddział lokalny>
user2928048
32
Łatwa droga:
git fetch
git log -p HEAD..FETCH_HEAD
Spowoduje to najpierw pobranie zmian z domyślnego pilota (pochodzenia). Zostanie on utworzony automatycznie po sklonowaniu repozytorium. Możesz być także wyraźne: git fetch origin master.
Następnie git log służy do porównania twojej aktualnej gałęzi z tą właśnie pobraną. (Opcja -p(generuj łatkę) pokazuje różnice ).
git fetch - wszystko pobierze wszystko ze WSZYSTKICH pilotów. git fetch powinno wystarczyć, jeśli używasz domyślnego zdalnego źródła.
Christophe Keller
Niesamowite, że po 8 latach otrzymujemy kompletną odpowiedź, która właściwie wyjaśnia kroki. Możemy zrobić --help, aby uzyskać polecenia. SO polega na ich zrozumieniu.
gdbj
11
Niech twoja działająca gałąź jest programistyczna i chcesz rozróżnić lokalną gałąź programistyczną i zdalną gałąź programistyczną, w takim przypadku składnia powinna być podobna git diff remotes/origin/development..development
lub
Tutaj mam dwie lokalne oddziały ( my-brancha master) i 4 (Remote some-branch, some-other-branch, master, i my-branch).
Również gwiazdka obok my-branchoznacza, że aktualnie jestem w tej gałęzi (można to również wiedzieć za pomocą polecenia git status, które wyświetli:) On branch my-branch..
Uwaga: odległe gałęzie w powłoce git bash są pokazane na czerwono, a lokalne na zielono.
Aby pokazać tylko lokalne oddziały, możesz chcieć użyć, git branch -lale to zupełnie inne polecenie. Aby pokazać lokalne oddziały, użyj git branchbez opcji
$ git branch
* my-branch
master
Aby dokończyć przegląd podstawowych opcji gałęzi, jest to, --listże w przeciwieństwie do tego, czego można się spodziewać, jest zezwolenie na filtrowanie . Użyj go z takim wzorem:
$ git branch --list 'my*'
* my-branch
Można również połączyć --listz opcjami -ai -rale upewnij się, aby dostosować swój wzorzec odpowiednio ( pamiętaj: zdalnych oddziałów zacząć „pilotów” ). Przykład:
# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch
# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
remotes/origin/my-branch
Teraz możesz porównać dowolne dwie gałęzie ze wszystkich dostępnych (możesz również porównać dwóch mieszkańców lub dwa piloty).
Tutaj porównuję lokalny ze zdalnym my-branch, są one zsynchronizowane, więc nie otrzymuję żadnych danych wyjściowych:
$ git diff my-branch remotes/origin/my-branch
Uwaga: musisz podać pełne nazwy oddziałów bez znaków cudzysłowu.
Mogę również porównać lokalny my-branchdo zdalnego master. Tutaj otrzymuję dane wyjściowe, ponieważ pilot my-branchnie został scalony z gałęzią master.
Oto krótka odpowiedź, jeśli porównujesz swoją obecną gałąź i coś, co chcesz git pull.
git fetch
git diff FETCH_HEAD
Pierwsze polecenie ustali, która gałąź zdalna odpowiada twojej gałęzi. Artefakt tego obliczenia w FETCH_HEADreferencji. Następnie drugie polecenie używa tego porównania do porównania z obecnym oddziałem.
Wiem, że jest już kilka odpowiedzi na to pytanie, ale podczas próby większości z nich wystąpił dziwny błąd.
W moim przypadku mam drugi zdalny nazywa herokuto nieorigin a ponieważ nie był zsynchronizowany Dostałem ten błąd, gdy próbuje uruchomić git diff master heroku/master:
fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
lub to, gdy wypróbowujesz inne podejście git diff master..heroku/master:
fatal: bad revision 'master..heroku/master'
Rozwiązanie wyraźnie wspomniało o zdalnej nazwie git fetchprzed uruchomieniem git diff, w moim przypadku:
Myślę, że jest to interesujące, ponieważ jest to porównanie, które mogę wykonać przed zatwierdzeniem i wypchnięciem. Niestety w systemie Windows vimdiff za wyświetlanie jest brzydki; czy jest jakiś sposób na użycie czegoś lepszego, na przykład notepad ++?
Stefano Scarpanti
3
Przykład
git diff 'master' 'testlocalBranch'
Jeśli korzystasz z edytora, takiego jak webstorm, możesz kliknąć prawym przyciskiem myszy plik wybierz Porównaj z gałęzią i wpisz / wybierz swoją gałąź.
Co to dodaje do ponad 7,5-letniej akceptowanej odpowiedzi z ponad 170 głosami pozytywnymi?
Mark Rotteveel,
To jest dla użytkownika mrblah lub podobnych użytkowników, którzy dodali komentarz do zaakceptowanej odpowiedzi. Składnia różni się od przykładu, a przykład pomaga bardziej z punktu widzenia początkującego.
Kurkula,
2
W takim przypadku powinno być w komentarzu do tej odpowiedzi.
rachit
1
W VS 2019 po prostu wykonaj FETCH Nie ściągaj kodu.
Oto co zrobiłem. Dodano poniżej w pliku .gitconfig, dzięki czemu mogę korzystać z Beyond Compare
git fetch # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff
Różnicowanie za pomocą arbitralnego oddziału zdalnego
To odpowiada na pytanie w twoim nagłówku („jego pilot”); jeśli chcesz odróżnić się od „zdalnego” (który nie jest skonfigurowany jako odgałęzienie dla gałęzi), musisz skierować go bezpośrednio. Możesz zobaczyć wszystkie zdalne gałęzie z następującymi elementami:
git branch -r
Możesz zobaczyć wszystkie skonfigurowane piloty w następujący sposób:
git remote show
Możesz zobaczyć konfigurację gałęzi / śledzenia dla jednego pilota (np. Pochodzenia) w następujący sposób:
git remote show origin
Po określeniu odpowiedniej gałęzi początkowej, po prostu zrób normalną różnicę :)
Jeśli używasz TortoiseGit (zapewnia GUI dla Git), możesz kliknąć prawym przyciskiem myszy folder repozytorium Git, a następnie kliknąć Git Sync.
Możesz wybrać swoje oddziały do porównania, jeśli nie zostaną wybrane. Następnie możesz zobaczyć zatwierdzenie różnic. Możesz także kliknąć prawym przyciskiem myszy dowolny zatwierdzenie, Compare with previous revisionaby wyświetlić różnice obok siebie.
git diff HEAD origin/HEAD
co wydaje się wskazywać na inną gałąź zdalną niż ta, którą zamierzałem. Korzystanie z pełnej nazwy oddziału działa zgodnie z oczekiwaniami.Odpowiedzi:
Aby zaktualizować oddziały zdalnego śledzenia, musisz
git fetch
najpierw wpisać, a następnie:Możesz
git branch -a
wyświetlić listę wszystkich oddziałów (lokalnych i zdalnych), a następnie wybrać nazwę oddziału z listy (wystarczy usunąćremotes/
z nazwy oddziału zdalnego.Przykład:
git diff master origin/master
(gdzie „master” jest lokalną gałęzią master, a „origin / master” jest zdalnym mianem origin i gałąź master).źródło
git fetch
)[diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = false
Upewnij się, że ścieżka do pliku code.exe jest poprawna.Na przykład
git diff master origin/master
lubgit diff featureA origin/next
Oczywiście, aby mieć wspomniany oddział zdalnego śledzenia , musisz
git fetch
najpierw; i potrzebujesz go, aby mieć aktualne informacje o oddziałach w zdalnym repozytorium.źródło
git diff <remote>/<remote branch> <local branch>
aby zobaczyć, co zrobi mój push do zdalnego repo.git diff origin
jest wystarczający, jeśli porównasz go ze swoim odgałęzieniem.git fetch
na początku, że powoduje to problemy początkującym jak jagit diff <remote>/<remote branch> <local branch>
? W przeciwnym razie dodawanie i usuwanie włącza się na moim komputerze (git wersja 2.7.0.windows.2)Pierwszy typ
aby uzyskać listę dostępnych oddziałów. Na wyjściu możesz zobaczyć coś takiego
Następnie pokaż różnicę
źródło
...
zamiast..
?git log origin/my_branch..
co będzie traktowaneHEAD
jako lokalny referendarz, co w dużej mierze masz na myśli.fatal: bad revision
lubfatal: ambiguous argument
. Chciałem tylko zobaczyć różnicę w tym samym pliku z innej gałęzi, czy to było zbyt wiele? Tak, tak było. :-)git diff remotes/origin/<base branch> <current branch> -- <filename>
działa świetnie na git 1.8.3.1Jeśli jesteś w danym oddziale i chcesz porównać go z odgałęzieniem, które śledzisz, użyj
jeśli twój upstream nie jest ustawiony (zwykle tak, dziękuję Arijoon w komentarzach)
Dzięki tej odpowiedzi dokumentacja git do określania wersji ma:
źródło
git diff @ @{upstream}
. Dodatkową zaletą@
jest toHEAD
, gdzie jesteś teraz, więc porównujeszHEAD
z tym, co śledzi twoja gałąź. Możesz użyć@{push}
zamiast upstream, aby uzyskać różnicę między gałęzią, do której chcesz przepchnąćfatal: ambiguous argument '@upstream': unknown revision or path not in the working tree
.git diff @\{upstream\}
Zamiast tego musiałem użyć . 😥git fetch
Najpierw musisz , bo to nic nie robi, nie pokazuje wyników; przetestowano, usuwając plik z początku repozytorium i uruchomiono to polecenie lokalnie. .. działa tylko po pobraniu.Rozumiem znacznie lepiej wyniki:
git diff <remote-tracking branch> <local branch>
pokazuje mi to, co zostanie usunięte i co zostanie dodane, jeśli popchnę lokalny oddział. Oczywiście jest tak samo, tylko odwrotnie, ale dla mnie jest bardziej czytelny i bardziej komfortowo patrzę na to, co się wydarzy.
źródło
Łatwa droga:
Spowoduje to najpierw pobranie zmian z domyślnego pilota (pochodzenia). Zostanie on utworzony automatycznie po sklonowaniu repozytorium. Możesz być także wyraźne:
git fetch origin master
.Następnie git log służy do porównania twojej aktualnej gałęzi z tą właśnie pobraną. (Opcja
-p
(generuj łatkę) pokazuje różnice ).źródło
Tak to robię.
to pobierze wszystko ze zdalnego, więc kiedy sprawdzisz różnicę, porówna różnicę ze zdalną gałęzią.
powyższe polecenie wyświetli wszystkie gałęzie.
Teraz możesz sprawdzić różnicę w następujący sposób.
spowoduje to porównanie twojego oddziału lokalnego ze zdalnym
źródło
Niech twoja działająca gałąź jest programistyczna i chcesz rozróżnić lokalną gałąź programistyczną i zdalną gałąź programistyczną, w takim przypadku składnia powinna być podobna
git diff remotes/origin/development..development
lub
git fetch origin git diff origin/development
źródło
tl; dr :
git diff <local branch> <remote branch>
Kiedy używam gita na powłoce, lubię najpierw orientować się, rozglądając się. Oto polecenie pokazujące wszystkie gałęzie
Tutaj mam dwie lokalne oddziały (
my-branch
amaster
) i 4 (Remotesome-branch
,some-other-branch
,master
, imy-branch
).Również gwiazdka obok
my-branch
oznacza, że aktualnie jestem w tej gałęzi (można to również wiedzieć za pomocą poleceniagit status
, które wyświetli:)On branch my-branch.
.Uwaga: odległe gałęzie w powłoce git bash są pokazane na czerwono, a lokalne na zielono.
Jeśli chcesz tylko wyświetlić zdalne gałęzie :
Aby pokazać tylko lokalne oddziały, możesz chcieć użyć,
git branch -l
ale to zupełnie inne polecenie. Aby pokazać lokalne oddziały, użyjgit branch
bez opcjiAby dokończyć przegląd podstawowych opcji gałęzi, jest to,
--list
że w przeciwieństwie do tego, czego można się spodziewać, jest zezwolenie na filtrowanie . Użyj go z takim wzorem:Można również połączyć
--list
z opcjami-a
i-r
ale upewnij się, aby dostosować swój wzorzec odpowiednio ( pamiętaj: zdalnych oddziałów zacząć „pilotów” ). Przykład:Dokumenty: https://git-scm.com/docs/git-branch
Teraz możesz porównać dowolne dwie gałęzie ze wszystkich dostępnych (możesz również porównać dwóch mieszkańców lub dwa piloty).
Tutaj porównuję lokalny ze zdalnym
my-branch
, są one zsynchronizowane, więc nie otrzymuję żadnych danych wyjściowych:Uwaga: musisz podać pełne nazwy oddziałów bez znaków cudzysłowu.
Mogę również porównać lokalny
my-branch
do zdalnegomaster
. Tutaj otrzymuję dane wyjściowe, ponieważ pilotmy-branch
nie został scalony z gałęzią master.źródło
Jeśli chcesz zobaczyć różnicę jak tylko nazwy plików zmienił wtedy użyć:
git diff --name-status <remote-branch> <local-branch>
,inny to pokaże wszystkie różnice między dwoma oddziałami:
git diff <remote-branch> <local-branch>
źródło
Oto krótka odpowiedź, jeśli porównujesz swoją obecną gałąź i coś, co chcesz
git pull
.Pierwsze polecenie ustali, która gałąź zdalna odpowiada twojej gałęzi. Artefakt tego obliczenia w
FETCH_HEAD
referencji. Następnie drugie polecenie używa tego porównania do porównania z obecnym oddziałem.źródło
Wiem, że jest już kilka odpowiedzi na to pytanie, ale podczas próby większości z nich wystąpił dziwny błąd.
W moim przypadku mam drugi zdalny nazywa
heroku
to nieorigin
a ponieważ nie był zsynchronizowany Dostałem ten błąd, gdy próbuje uruchomićgit diff master heroku/master
:fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.
lub to, gdy wypróbowujesz inne podejście
git diff master..heroku/master
:fatal: bad revision 'master..heroku/master'
Rozwiązanie wyraźnie wspomniało o zdalnej nazwie
git fetch
przed uruchomieniemgit diff
, w moim przypadku:Mam nadzieję, że pomaga innym z tym samym problemem.
źródło
Spowoduje to porównanie żądanego zatwierdzenia z lokalnymi plikami. Nie zapomnij kropki na końcu (dla lokalnych).
Na przykład, aby porównać pliki lokalne z niektórymi zmianami:
(i nie potrzebujesz git fetch, chyba że konieczne jest porównanie z nowymi zatwierdzeniami)
źródło
Przykład
Jeśli korzystasz z edytora, takiego jak webstorm, możesz kliknąć prawym przyciskiem myszy plik wybierz Porównaj z gałęzią i wpisz / wybierz swoją gałąź.
źródło
W VS 2019 po prostu wykonaj FETCH Nie ściągaj kodu.
Oto co zrobiłem. Dodano poniżej w pliku .gitconfig, dzięki czemu mogę korzystać z Beyond Compare
Dodano poniżej
Otwórz wiersz polecenia i przejdź do katalogu roboczego. Podałem poniżej, aby porównać lokalny oddział DEV ze zdalnym oddziałem DEV
Otworzy się Beyond Compare i otworzą katalogi, które mają różne pliki. Jeśli żadne zmiany Beyond Compare nie zostaną uruchomione.
źródło
Zastanawiam się, czy w mojej głównej gałęzi nastąpiła jakaś zmiana ...
źródło
Ustawiać
git config alias.udiff 'diff @{u}'
Różnicowanie HEAD z HEAD @ {upstream}
Różnicowanie za pomocą arbitralnego oddziału zdalnego
To odpowiada na pytanie w twoim nagłówku („jego pilot”); jeśli chcesz odróżnić się od „zdalnego” (który nie jest skonfigurowany jako odgałęzienie dla gałęzi), musisz skierować go bezpośrednio. Możesz zobaczyć wszystkie zdalne gałęzie z następującymi elementami:
git branch -r
Możesz zobaczyć wszystkie skonfigurowane piloty w następujący sposób:
git remote show
Możesz zobaczyć konfigurację gałęzi / śledzenia dla jednego pilota (np. Pochodzenia) w następujący sposób:
git remote show origin
Po określeniu odpowiedniej gałęzi początkowej, po prostu zrób normalną różnicę :)
git diff [MY_LOCAL] MY_REMOTE_BRANCH
źródło
To jest dość proste. Możesz użyć:
git diff remote/my_topic_branch my_topic_branch
Gdzie
my_topic_branch
jest twoja gałąź tematyczna.źródło
Załóżmy, że skonfigurowałeś już swoje
origin
zdalne repozytorium. Następnie,git diff <local branch> <origin>/<remote branch name>
źródło
próbować:
Zakładając, że chcesz odróżnić bieżące oddziały lokalne
HEAD
od źródła. I zakładając, że jesteś w lokalnym oddziale. :)źródło
Jeśli używasz TortoiseGit (zapewnia GUI dla Git), możesz kliknąć prawym przyciskiem myszy folder repozytorium Git, a następnie kliknąć
Git Sync
.Możesz wybrać swoje oddziały do porównania, jeśli nie zostaną wybrane. Następnie możesz zobaczyć zatwierdzenie różnic. Możesz także kliknąć prawym przyciskiem myszy dowolny zatwierdzenie,
Compare with previous revision
aby wyświetlić różnice obok siebie.źródło