Szukaj…
Składnia
-
git diff [options] [<commit>] [--] [<path>…]
-
git diff [options] --cached [<commit>] [--] [<path>…]
-
git diff [options] <commit> <commit> [--] [<path>…]
-
git diff [options] <blob> <blob>
-
git diff [options] [--no-index] [--] <path> <path>
Parametry
Parametr | Detale |
---|---|
-p, -u, --patch | Wygeneruj łatkę |
-s, --no-patch | Pomiń wyjście różnicowe. Przydatne dla poleceń takich jak git show które domyślnie pokazują łatkę lub do anulowania efektu --patch |
--surowy | Wygeneruj różnicę w surowym formacie |
--diff-algorytm = | Wybierz algorytm różnicowy. Dostępne są następujące warianty: myers , minimal , patience , histogram |
--streszczenie | Wyprowadza skrócone podsumowanie informacji o rozszerzonych nagłówkach, takich jak kreacje, nazwy i zmiany trybu |
- tylko nazwa | Pokaż tylko nazwy zmienionych plików |
- status-nazwa | Pokaż nazwy i statusy zmienionych plików Najpopularniejsze statusy to M (zmodyfikowane), A (dodane) i D (usunięte) |
--czek | Ostrzegaj, jeśli zmiany wprowadzają znaczniki konfliktu lub błędy białych znaków. Błędy, które są uważane za spacje, są kontrolowane przez konfigurację core.whitespace . Domyślnie końcowe znaki spacji (w tym wiersze składające się wyłącznie z białych znaków) i spacja, po której bezpośrednio następuje znak tabulacji wewnątrz początkowego wcięcia linii, są uważane za błędy białych znaków. Wychodzi ze stanem niezerowym, jeśli wystąpią problemy. Nie jest kompatybilny z --exit-code |
- pełny indeks | Zamiast pierwszej garstki znaków wyświetlaj pełne nazwy obiektów obiektów blob przed i po obrazie w wierszu „indeksu” podczas generowania wyjścia formatu poprawki |
--dwójkowy | Oprócz --full-index , --full-index binarny plik różnic, który można zastosować za pomocą git apply --full-index |
-tekst | Traktuj wszystkie pliki jako tekst. |
--kolor | Ustaw tryb koloru; tzn. użyj --color=always jeśli chcesz --color=always na mniej i zachować kolor gita |
Pokaż różnice w działającej gałęzi
git diff
Spowoduje to wyświetlenie nieustawionych zmian w bieżącej gałęzi z zatwierdzenia przed nią. Pokazane zostaną tylko zmiany w stosunku do indeksu, co oznacza, że pokazuje, co można dodać do następnej popełnić, ale nie mają. Aby dodać (wprowadzić) zmiany, możesz użyć git add
.
Jeśli plik jest przemieszczany, ale został zmodyfikowany po przemieszczeniu, git diff
pokaże różnice między bieżącym plikiem a wersją przemieszczaną.
Pokaż różnice dla plików przemieszczanych
git diff --staged
Spowoduje to wyświetlenie zmian między poprzednim zatwierdzeniem a aktualnie przemieszczanymi plikami.
UWAGA: Możesz również użyć następujących poleceń, aby osiągnąć to samo:
git diff --cached
Który jest tylko synonimem --staged
lub
git status -v
Co spowoduje uruchomienie szczegółowych ustawień polecenia status
.
Pokaż zmiany zarówno etapowe, jak i niestacjonarne
Aby wyświetlić wszystkie zmiany etapowe i niestacjonarne, użyj:
git diff HEAD
UWAGA: Możesz także użyć następującego polecenia:
git status -vv
Różnica polega na tym, że wynik tego ostatniego powie ci, które zmiany są wprowadzane dla zatwierdzenia, a które nie.
Pokaż zmiany między dwoma zatwierdzeniami
git diff 1234abc..6789def # old new
Np .: Pokaż zmiany dokonane w ostatnich 3 zatwierdzeniach:
git diff @~3..@ # HEAD -3 HEAD
Uwaga: dwie kropki (..) są opcjonalne, ale dodają przejrzystości.
To pokaże różnicę tekstową między zatwierdzeniami, niezależnie od tego, gdzie znajdują się w drzewie.
Używanie meldu, aby zobaczyć wszystkie modyfikacje w katalogu roboczym
git difftool -t meld --dir-diff
pokaże zmiany katalogu roboczego. Alternatywnie,
git difftool -t meld --dir-diff [COMMIT_A] [COMMIT_B]
pokaże różnice między 2 konkretnymi zatwierdzeniami.
Pokaż różnice dla określonego pliku lub katalogu
git diff myfile.txt
Pokazuje zmiany między poprzednim zatwierdzeniem określonego pliku ( myfile.txt
) a wersją zmodyfikowaną lokalnie, która nie została jeszcze przemieszczona.
Działa to również w przypadku katalogów:
git diff documentation
Powyższe pokazuje zmiany między poprzednim zatwierdzeniem wszystkich plików w określonym katalogu ( documentation/
) a lokalnie zmodyfikowanymi wersjami tych plików, które nie zostały jeszcze ustawione.
Aby pokazać różnicę między pewną wersją pliku w danym zatwierdzeniu a lokalną wersją HEAD
, możesz określić zatwierdzenie, z którym chcesz porównać:
git diff 27fa75e myfile.txt
Lub jeśli chcesz zobaczyć wersję między dwoma osobnymi zatwierdzeniami:
git diff 27fa75e ada9b57 myfile.txt
Aby pokazać różnicę między wersją określoną przez skrót ada9b57
a najnowszym zatwierdzeniem w gałęzi my_branchname
tylko dla katalogu względnego o nazwie my_changed_directory/
możesz to zrobić:
git diff ada9b57 my_branchname my_changed_directory/
Wyświetlanie różnicy słów dla długich linii
git diff [HEAD|--staged...] --word-diff
Zamiast wyświetlać zmienione linie, będą wyświetlać różnice w liniach. Na przykład zamiast:
-Hello world
+Hello world!
Tam, gdzie cała linia jest oznaczona jako zmieniona, word-diff
zmienia dane wyjściowe na:
Hello [-world-]{+world!+}
Możesz pominąć znaczniki [-
, -]
, {+
, +}
, określając --word-diff=color
lub --color-words
. Użyje tylko kodowania kolorami, aby zaznaczyć różnicę:
Wyświetlanie połączenia trójstronnego, w tym wspólnego przodka
git config --global merge.conflictstyle diff3
Ustawia styl diff3
jako domyślny: zamiast zwykłego formatu w sprzecznych sekcjach, wyświetlając dwa pliki:
<<<<<<< HEAD
left
=======
right
>>>>>>> master
będzie zawierać dodatkową sekcję zawierającą oryginalny tekst (pochodzący od wspólnego przodka):
<<<<<<< HEAD
first
second
|||||||
first
=======
last
>>>>>>> master
Ten format ułatwia zrozumienie konfliktu scalania, tj. w tym przypadku dodano lokalnie second
, a zdalną zmieniono z first
na last
, rozwiązując:
last
second
Ta sama rozdzielczość byłaby znacznie trudniejsza przy użyciu domyślnej:
<<<<<<< HEAD
first
second
=======
last
>>>>>>> master
Pokaż różnice między bieżącą wersją a ostatnią wersją
git diff HEAD^ HEAD
Spowoduje to wyświetlenie zmian między poprzednim a bieżącym zatwierdzeniem.
Pliki tekstowe i binarne plist kodowane przez Diff UTF-16
Możesz różnicować pliki zakodowane w UTF-16 (przykłady ciągów lokalizacji dla iOS i macOS to przykłady), określając, w jaki sposób git powinien różnicować te pliki.
Dodaj następujące elementy do pliku ~/.gitconfig
.
[diff "utf16"]
textconv = "iconv -f utf-16 -t utf-8"
iconv
to program do konwersji różnych kodowań .
Następnie edytuj lub utwórz plik .gitattributes
w katalogu głównym repozytorium, w którym chcesz go użyć. Lub po prostu edytuj ~/.gitattributes
.
*.strings diff=utf16
Spowoduje to konwersję wszystkich plików z .strings
przed git diffs.
Możesz zrobić podobne rzeczy dla innych plików, które można przekonwertować na tekst.
W przypadku plików binarnych plist edytujesz .gitconfig
[diff "plist"]
textconv = plutil -convert xml1 -o -
i .gitattributes
*.plist diff=plist
Porównywanie gałęzi
Pokaż zmiany między końcówką new
a końcówką original
:
git diff original new # equivalent to original..new
Pokaż wszystkie zmiany dotyczące new
ponieważ jest on rozgałęziony od original
:
git diff original...new # equivalent to $(git merge-base original new)..new
Używanie tylko jednego parametru, takiego jak
git diff oryginał
jest równa
git diff original..HEAD
Pokaż zmiany między dwoma oddziałami
git diff branch1..branch2
Utwórz diff kompatybilny z łatką
Czasami potrzebujesz tylko różnicy do zastosowania za pomocą łatki. git --diff
nie działa. Spróbuj zamiast tego:
git diff --no-prefix > some_file.patch
W innym miejscu możesz to odwrócić:
patch -p0 < some_file.patch
różnica między dwoma zatwierdzeniami lub gałęziami
Aby zobaczyć różnicę między dwoma oddziałami
git diff <branch1>..<branch2>
Aby zobaczyć różnicę między dwoma oddziałami
git diff <commitId1>..<commitId2>
Aby wyświetlić różnicę z bieżącą gałęzią
git diff <branch/commitId>
Aby wyświetlić podsumowanie zmian
git diff --stat <branch/commitId>
Aby wyświetlić pliki, które zmieniły się po określonym zatwierdzeniu
git diff --name-only <commitId>
Aby wyświetlić pliki inne niż gałąź
git diff --name-only <branchName>
Aby wyświetlić pliki, które zmieniły się w folderze po określonym zatwierdzeniu
git diff --name-only <commitId> <folder_path>