Jak mogę zobaczyć diff
pomiędzy oddziałem lokalnym a oddziałem zdalnym?
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.
Jak mogę zobaczyć diff
pomiędzy oddziałem lokalnym a oddziałem zdalnym?
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:
git diff <masterbranch_path> <remotebranch_path>
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).
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.
git diff <local branch> <remote>/<remote branch>
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.
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 ja
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)
Pierwszy typ
git branch -a
aby uzyskać listę dostępnych oddziałów. Na wyjściu możesz zobaczyć coś takiego
* master
remotes/main/master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/mt
remotes/upstream/master
remotes/upstream/mt
Następnie pokaż różnicę
git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master
...
zamiast ..
?
git log origin/my_branch..
co będzie traktowane HEAD
jako lokalny referendarz, co w dużej mierze masz na myśli.
fatal: bad revision
lub 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
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)
git diff @{push}
Dzięki tej odpowiedzi dokumentacja git do określania wersji ma:
<branchname>@{upstream}
Na przykładmaster@{upstream}
,@{u}
przyrostek@{upstream}
do BRANCHNAME (krótka forma<branchname>@{u}
) odnosi się do gałęzi że gałęzi określonej przezbranchname
jest opierać się na górnej części (skonfigurowanebranch.<name>.remote
ibranch.<name>.merge
). Brakujebranchname
domyślnie bieżącej.
git diff @ @{upstream}
. Dodatkową zaletą @
jest to HEAD
, gdzie jesteś teraz, więc porównujesz HEAD
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.
Ł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 ).
Tak to robię.
#To update your local.
git fetch --all
to pobierze wszystko ze zdalnego, więc kiedy sprawdzisz różnicę, porówna różnicę ze zdalną gałęzią.
#to list all branches
git branch -a
powyższe polecenie wyświetli wszystkie gałęzie.
#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
(or)
git status
Teraz możesz sprawdzić różnicę w następujący sposób.
git diff origin/<branch_name>
spowoduje to porównanie twojego oddziału lokalnego ze zdalnym
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
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
$ git branch -a # (or git branch --all)
* my-branch
master
remotes/origin/some-branch
remotes/origin/HEAD -> origin/master
remotes/origin/my-branch
remotes/origin/some-other-branch
remotes/origin/master
Tutaj mam dwie lokalne oddziały ( my-branch
a master
) i 4 (Remote some-branch
, some-other-branch
, master
, i my-branch
).
Również gwiazdka obok my-branch
oznacza, ż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.
Jeśli chcesz tylko wyświetlić zdalne gałęzie :
$ git branch -r # (or git branch --remotes)
origin/some-branch
origin/HEAD -> origin/master
origin/my-branch
origin/some-other-branch
origin/master
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żyj git branch
bez 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ć --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:
# 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
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:
$ 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-branch
do zdalnego master
. Tutaj otrzymuję dane wyjściowe, ponieważ pilot my-branch
nie został scalony z gałęzią master.
$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
/*
* Function: doCall
[ . . . ]
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>
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_HEAD
referencji. 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 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 uruchomieniem git diff
, w moim przypadku:
$ git fetch heroku
$ git diff master heroku/master
Mam nadzieję, że pomaga innym z tym samym problemem.
git difftool <commit> .
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:
git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341.
(i nie potrzebujesz git fetch, chyba że konieczne jest porównanie z nowymi zatwierdzeniami)
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łąź.
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
File location: C:\Users\[username]\.gitconfig
Dodano poniżej
[diff]
tool = bc
[difftool "bc"]
path = c:/Program Files/Beyond Compare 4/bcomp.exe
Otwórz wiersz polecenia i przejdź do katalogu roboczego. Podałem poniżej, aby porównać lokalny oddział DEV ze zdalnym oddziałem DEV
git difftool dev origin/dev --dir-diff
Otworzy się Beyond Compare i otworzą katalogi, które mają różne pliki. Jeśli żadne zmiany Beyond Compare nie zostaną uruchomione.
Zastanawiam się, czy w mojej głównej gałęzi nastąpiła jakaś zmiana ...
Git Checkout Master
status git
gałąź git -a
piloty master / origin / master
git diff origin / master
git config alias.udiff 'diff @{u}'
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
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
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.
próbować:
git diff origin HEAD
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. :)
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.