Поиск…
Синтаксис
-
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>
параметры
параметр | подробности |
---|---|
-p, -u, --patch | Создание патча |
-s, -no-patch | Подавление разностного выхода. Полезно для таких команд, как git show которые показывают патч по умолчанию, или для отмены эффекта --patch |
--raw | Создать diff в необработанном формате |
--diff-алгоритм = | Выберите алгоритм дифференциала. myers следующие варианты: myers , minimal , patience , histogram |
--резюме | Выведите сжатое резюме расширенной информации заголовка, например, создания, переименования и изменения режима |
--name только | Показывать только имена измененных файлов |
--name-статус | Показать имена и статусы измененных файлов Наиболее распространенными статусами являются M (Модифицировано), A (Добавлено) и D (Удалено) |
--проверять | Предупреждать, если изменения вводят маркеры конфликтов или ошибки пробелов. То, что считается ошибочными ошибками, управляется конфигурацией core.whitespace . По умолчанию заглавные пробелы (включая строки, состоящие исключительно из пробелов) и пробельный символ, который сразу же следует за символом табуляции внутри начального отступа строки, считаются пробельными ошибками. Выходы с ненулевым статусом при обнаружении проблем. Не совместим с --exit-кодом |
--full индекс | Вместо первых нескольких символов, покажите полные имена объектов до и после изображения в строке «индекс» при генерации выходного файла патча |
--binary | В дополнение к --full-index вывести двоичную разницу, которая может применяться с применением git apply |
-текст | Относитесь ко всем файлам в виде текста. |
--цвет | Установите цветной режим; т.е. используйте --color=always если вы хотите направить diff на меньшее и сохранить окраску git |
Показать отличия в рабочей ветви
git diff
Это покажет неустановленные изменения в текущей ветке от фиксации до нее. Он будет показывать только изменения относительно индекса, то есть показывает, что вы можете добавить к следующему фиксации, но не имеет. Чтобы добавить (этап) эти изменения, вы можете использовать git add
.
Если файл поставлен, но был изменен после его постановки, git diff
покажет различия между текущим файлом и поэтапной версией.
Показать различия для поэтапных файлов
git diff --staged
Это покажет изменения между предыдущим фиксацией и текущими поэтапными файлами.
ПРИМЕЧАНИЕ. Вы также можете использовать следующие команды, чтобы выполнить одно и то же:
git diff --cached
Это всего лишь синоним для --staged
или
git status -v
Это вызовет подробные настройки команды status
.
Показать как поэтапные, так и неустановленные изменения
Чтобы показать все поэтапные и неустановленные изменения, используйте:
git diff HEAD
ПРИМЕЧАНИЕ. Вы также можете использовать следующую команду:
git status -vv
Разница заключается в том, что вывод последнего фактически скажет вам, какие изменения были поставлены для фиксации, а какие нет.
Показать изменения между двумя коммитами
git diff 1234abc..6789def # old new
Например: Покажите изменения, внесенные в последние 3 фиксации:
git diff @~3..@ # HEAD -3 HEAD
Примечание: две точки (..) являются необязательными, но добавляются четкость.
Это покажет текстовую разницу между коммитами, независимо от того, где они находятся в дереве.
Использование meld для просмотра всех изменений в рабочем каталоге
git difftool -t meld --dir-diff
будет отображаться изменения рабочего каталога. С другой стороны,
git difftool -t meld --dir-diff [COMMIT_A] [COMMIT_B]
покажет различия между двумя конкретными коммитами.
Показать отличия для определенного файла или каталога
git diff myfile.txt
Показывает изменения между предыдущим фиксацией указанного файла ( myfile.txt
) и локально модифицированной версией, которая еще не была поставлена.
Это также работает для каталогов:
git diff documentation
Вышеприведенное показывает изменения между предыдущим фиксацией всех файлов в указанном каталоге ( documentation/
) и локально модифицированными версиями этих файлов, которые еще не были поставлены.
Чтобы показать разницу между некоторой версией файла в данной фиксации и локальной версией HEAD
вы можете указать фиксацию, которую хотите сравнить:
git diff 27fa75e myfile.txt
Или если вы хотите увидеть версию между двумя отдельными коммитами:
git diff 27fa75e ada9b57 myfile.txt
Чтобы показать разницу между версией, указанной хешей ada9b57
и последней фиксацией на ветке my_branchname
только для относительного каталога с именем my_changed_directory/
вы можете сделать это:
git diff ada9b57 my_branchname my_changed_directory/
Просмотр слова-diff для длинных строк
git diff [HEAD|--staged...] --word-diff
Вместо того, чтобы отображать строки, это будет отображать различия в строках. Например, вместо:
-Hello world
+Hello world!
Если вся строка помечена как измененная, word-diff
изменяет вывод на:
Hello [-world-]{+world!+}
Вы можете опустить маркеры [-
, -]
, {+
, +}
, указав --word-diff=color
или --color-words
. Для обозначения различия используется только цветовое кодирование:
Просмотр трехстороннего слияния, включая общего предка
git config --global merge.conflictstyle diff3
Устанавливает стиль diff3
по умолчанию: вместо обычного формата в конфликтующих разделах, показывающий два файла:
<<<<<<< HEAD
left
=======
right
>>>>>>> master
он будет включать дополнительный раздел, содержащий исходный текст (исходящий из общего предка):
<<<<<<< HEAD
first
second
|||||||
first
=======
last
>>>>>>> master
Этот формат упрощает понимание конфликта слиянием, т. Е. в этом случае добавляется локально second
, а удаленное изменение first
до last
, разрешая:
last
second
Такое же разрешение было бы намного сложнее использовать по умолчанию:
<<<<<<< HEAD
first
second
=======
last
>>>>>>> master
Покажите разницу между текущей версией и последней версией
git diff HEAD^ HEAD
Это покажет изменения между предыдущей фиксацией и текущей фиксацией.
Diff UTF-16 закодированные текстовые и двоичные файлы plist
Вы можете различать кодированные файлы UTF-16 (файлы строк локализации os iOS и macOS являются примерами), указав, как git должен различать эти файлы.
Добавьте в файл ~/.gitconfig
.
[diff "utf16"]
textconv = "iconv -f utf-16 -t utf-8"
iconv
- программа для преобразования различных кодировок .
Затем отредактируйте или создайте файл .gitattributes
в корне репозитория, где вы хотите его использовать. Или просто редактируйте ~/.gitattributes
.
*.strings diff=utf16
Это преобразует все файлы, заканчивающиеся на .strings
перед git diff.
Вы можете делать подобные вещи для других файлов, которые могут быть преобразованы в текст.
Для двоичных файлов .gitconfig
вы редактируете .gitconfig
[diff "plist"]
textconv = plutil -convert xml1 -o -
и .gitattributes
*.plist diff=plist
Сравнение ветвей
Покажите изменения между кончиками new
и концом original
:
git diff original new # equivalent to original..new
Показать все изменения на new
так как он разветвлен от original
:
git diff original...new # equivalent to $(git merge-base original new)..new
Использование только одного параметра, такого как
git diff original
эквивалентно
git diff original..HEAD
Показать изменения между двумя ветвями
git diff branch1..branch2
Создайте совместимую с патчем diff
Иногда вам просто нужен diff для применения с использованием патча. Обычный git --diff
не работает. Попробуйте это вместо этого:
git diff --no-prefix > some_file.patch
Затем в другом месте вы можете изменить его:
patch -p0 < some_file.patch
разница между двумя фиксацией или ветвью
Чтобы просмотреть разницу между двумя ветвями
git diff <branch1>..<branch2>
Чтобы просмотреть разницу между двумя ветвями
git diff <commitId1>..<commitId2>
Чтобы просмотреть diff с текущей ветвью
git diff <branch/commitId>
Чтобы просмотреть сводку изменений
git diff --stat <branch/commitId>
Просмотр файлов, которые были изменены после определенного фиксации
git diff --name-only <commitId>
Просмотр файлов, отличных от ветви
git diff --name-only <branchName>
Просмотр файлов, которые были изменены в папке после определенного фиксации
git diff --name-only <commitId> <folder_path>