Jak pokazać wprowadzone zmiany?
Wystawiłem kilka zmian do zatwierdzenia; Jak mogę zobaczyć różnice wszystkich plików, które są wystawiane do następnego zatwierdzenia? Znam git status, ale chciałbym zobaczyć rzeczywiste diffy - nie tylko nazwy plików, które są wystawiane.
Widziałem, że git-diff (1) strona man mówi
Git diff [--options] [--] [...]
Ten formularz ma na celu wyświetlenie zmian wprowadzonych względem indeksu (miejsce postoju dla następnego commita). Innymi słowy, różnice są tym, co mógłbyś powiedzieć gitowi, aby dalej dodawał do indeksu, ale nadal tego nie zrobiłeś. możesz wprowadzić te zmiany używając git-add(1).
Niestety, nie do końca rozumiem to. Musi być jakiś poręczny, jednowierszowy, dla którego mógłbym stworzyć alias, prawda?
14 answers
Powinno być:
git diff --cached
--cached
oznacza pokazanie zmian w pamięci podręcznej / indeksie (tj. zmian w poczekalni) względem bieżącego HEAD
. --staged
jest synonimem --cached
.
--staged
i --cached
nie wskazuje na HEAD
, tylko na różnicę w stosunku do HEAD
. Jeśli zdecydujesz się na użycie git add --patch
(lub git add -p
), --staged
zwróci to, co jest wystawione.
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-02-28 23:35:53
Prosta grafika sprawia, że jest to jaśniejsze:
Git diff
Pokazuje zmiany pomiędzy katalogiem roboczym a indeksem. Pokazuje to, co zostało zmienione, ale nie jest wystawiane dla commit.
Git diff --cached
Pokazuje zmiany pomiędzy indeksem a nagłówkiem (który jest ostatnim commitem w tej gałęzi). Pokazuje to, co zostało dodane do indeksu i wystawione do zatwierdzenia.
GIT diff HEAD
Pokazuje wszystkie zmiany między katalogiem roboczym a nagłówkiem (w tym zmiany w indeksie). Pokazuje wszystkie zmiany od ostatniego commita, niezależnie od tego, czy zostały wystawione dla commita, czy nie.
Również :
Jest trochę więcej szczegółów na 365Git.
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-03-23 17:11:50
Jeśli interesuje Cię wizualny widok side-by-side, narzędzie diffuse Visual diff może to zrobić. Pokaże nawet trzy szyby, jeśli niektóre, ale nie wszystkie zmiany są wystawione. W przypadku konfliktów będą nawet cztery szyby.
Wywołaj to za pomocą
diffuse -m
W Twojej kopii roboczej Git.
Według mnie najlepsza różnica wizualna, jaką widziałem od dekady. Ponadto, nie jest specyficzny dla Gita: współpracuje z wieloma innymi VC, w tym SVN, Mercurial, Bazar,..Zobacz także: Show both stsing & working tree in Git diff?
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 11:47:29
Zauważ, że git status -v
również pokazuje inscenizowane zmiany!
(co oznacza, że musisz wprowadzić -- git add
-- jakieś zmiany. Brak zmian w Ustawieniach, brak różnic z git status -v
.
Robi to od Git 1.2.0, luty 2006)
W swojej długiej formie (domyślnie), git status
mA nieudokumentowaną opcję "verbose", która faktycznie wyświetla różnicę między głową a indeksem.
I wkrótce stanie się jeszcze bardziej kompletna: zobacz " Show both stsing & working tree in Git diff?" (git 2.3.4+, Q2 2015):
git status -v -v
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:10:48
Możesz użyć tego polecenia.
git diff --cached --name-only
Opcja --cached
z git diff
oznacza pobieranie plików z poczekalni, a opcja --name-only
oznacza pobieranie tylko nazw plików.
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
2016-10-04 13:14:11
Do porównywania przestrzeni przejściowej z repozytorium(ostatni commit) użyj
$git diff --staged
Komenda porównuje zmiany wystawione ($ git add fileName
) z ostatnim zatwierdzeniem. Jeśli chcesz zobaczyć, co wystawiłeś, które trafią do Twojego następnego commita, możesz użyć git diff --stsinged. To polecenie porównuje wprowadzone zmiany z ostatnim zatwierdzeniem.
Do porównań roboczych i Stagingowych
$ git diff
Polecenie porównuje to, co znajduje się w katalogu roboczym z tym, co znajduje się w obszarze przejściowym. Ważne jest, aby zauważ, że git diff sam w sobie nie pokazuje wszystkich zmian dokonanych od ostatniego zatwierdzenia - tylko zmiany, które są nadal nieaktywne. Jeśli Ustawiłeś wszystkie zmiany ($ git add fileName
), git diff nie da ci żadnego wyjścia.
Ponadto, jeśli ustawisz plik ($ git add fileName
), a następnie go edytujesz, możesz użyć git diff, aby zobaczyć zmiany w pliku, które są stagowane i zmiany, które nie są stagowane.
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
2019-07-20 11:25:09
UŻYWANIE WIZUALNEGO NARZĘDZIA DIFF
Domyślna odpowiedź (w wierszu poleceń)
Najlepsze odpowiedzi tutaj poprawnie pokazują, jak wyświetlić buforowane/zainscenizowane zmiany w Index
:
$ git diff --cached
Lub $ git diff --staged
, który jest aliasem.
Uruchamianie Visual Diff Tool zamiast
Domyślna odpowiedź wypluwa zmiany różnic w Git bash(np. w wierszu poleceń lub w konsoli). Dla tych, którzy preferują wizualną reprezentację różnic między poszczególnymi plikami, w git dostępny jest skrypt, który uruchamia wizualne narzędzie różnicujące dla każdego oglądanego pliku, zamiast wyświetlać je w wierszu poleceń, o nazwie difftool
:
$ git difftool --staged
To zrobi to samo co git diff --staged
, z tym wyjątkiem, że za każdym razem, gdy narzędzie diff jest uruchomione (tj. za każdym razem, gdy plik jest przetwarzany przez diff), uruchomi domyślne narzędzie wizualnego diff (w moim środowisku jest to kdiff3).
Po uruchomieniu narzędzia skrypt Git diff zostanie wstrzymany do momentu zamknięcia narzędzia. Dlatego musisz zamknąć każdy plik, aby zobaczyć następny.
Zawsze możesz użyć difftool
zamiast diff
w poleceniach git
Dla wszystkich wizualnych różnic, git difftool
będzie działać w miejsce dowolnego polecenia git diff
, łącznie ze wszystkimi opcjami.
Na przykład, aby narzędzie Visual diff uruchomiło się bez pytania, czy zrobić to dla każdego pliku, Dodaj opcję -y
(myślę, że zazwyczaj będziesz tego chciał!!):
$ git difftool -y --staged
W tym przypadku będzie ciągnąć każdy plik w visual diff tool, jeden po drugim, wyświetlając następny po zamknięciu narzędzia.
W tym celu należy sprawdzić, czy dany plik jest przechowywany w plikuIndex
:
$ git difftool -y --staged <<relative path/filename>>
Wszystkie opcje można znaleźć na stronie podręcznika:
$ git difftool --help
Konfiguracja narzędzia Visual Git
Aby użyć wizualnego narzędzia git innego niż domyślne, użyj opcji -t <tool>
:
$ git difftool -t <tool> <<other args>>
Lub zobacz stronę podręcznika difftool, aby dowiedzieć się, jak skonfigurować git do używania innego domyślnego różnicowania wizualnego narzędzie.
Przykład .gitconfig
wpisy dla vscode jako narzędzie diff/merge
Część konfiguracji difftool polega na zmianie pliku .gitconfig
, albo za pomocą komend git, które zmieniają go za kulisami, albo bezpośrednio edytując.
Możesz znaleźć .gitconfig
w swoim katalogu domowym, na przykład ~
w Unixie lub normalnie c:\users\<username>
W Windows).
Lub możesz otworzyć użytkownika .gitconfig
w domyślnym edytorze Gita za pomocą git config -e --global
.
Oto przykładowe wpisy w mojej globalnej użytkownik .gitconfig
dla kodu VS jako narzędzia diff i merge:
[diff]
tool = vscode
guitool = vscode
[merge]
tool = vscode
guitool = vscode
[mergetool]
prompt = true
[difftool "vscode"]
cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\"
path = c:/apps/vscode/code.exe
[mergetool "vscode"]
cmd = code --wait \"$MERGED\"
path = c:/apps/vscode/code.exe
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
2020-07-12 00:08:17
Od wersji 1.7 i późniejszych powinno być:
git diff --staged
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
2016-07-27 11:36:41
Jeśli twoje zamiary to push-target zdalnej gałęzi repo, a twoje pierwsze przejście w dzienniku zmian commita było niekompletne, możesz poprawić instrukcję commita przed naciśnięciem w ten sposób.
Lokalnie
... wprowadzić pewne zmiany ...
git diff # look at unstaged changes
git commit -am"partial description of changes"
... przypomnij sobie więcej zmian, które nie zostały wymienione w commicie ...
Git diff origin / master # look at stsed but not pushed changes
... zmienić wystawione oświadczenie commit ...
git commit --amend -m"i missed mentioning these changes ...."
git push
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
2020-06-20 09:12:55
Jeśli masz więcej niż jeden plik ze zmianami, bardziej praktyczne może być użycie git add -i
, następnie wybierz 6: diff
i na koniec wybierz interesujący Cię plik(y).
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
2012-03-14 14:30:29
DomyślnieGit diff jest używany do pokazania zmian, które nie są dodawane do listy zaktualizowanych plików git. Ale jeśli chcesz pokazać zmiany, które są dodawane lub stagowane, musisz podać dodatkowe opcje, które poinformują Gita, że jesteś zainteresowany stagged lub added files diff .
$ git diff # Default Use
$ git diff --cached # Can be used to show difference after adding the files
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git
Przykład
$ git diff
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
$ git add x/y/z.js
$ git diff
$
Po dodaniu plików, nie możesz użyć domyślnego 'git diff'.Musisz zrobić tak: -
$ git diff --cached
diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {
- if (a)
+ if (typeof a !== 'undefined')
res = 1;
else
res = 2;
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-11-20 06:30:23
git gui
i {[1] } są narzędziami graficznymi, które umożliwiają przeglądanie i manipulowanie indeksem. Oba zawierają proste wizualne dyfuzory dla plików wystawionych, a git-cola
mogą również uruchomić bardziej wyrafinowane narzędzie różnicowania wizualnego side-by-side.
Zobacz moją odpowiedź na Jak usunąć plik z indeksu w git?, a także ten oficjalny katalog klientów Git - GUI .
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:34:44
Pomyśl także o gitk
narzędziu, dostarczonym z Gitem i bardzo przydatnym, aby zobaczyć zmiany
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
2016-08-03 10:40:51
--cached
nie zadziałało dla mnie, ... gdzie, zainspirowany git log
git diff origin/<branch>..<branch>
tak.
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
2020-06-24 19:52:11