Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.49.0
2025-03-14
- 2.48.1 no changes
-
2.48.0
2025-01-10
- 2.46.2 → 2.47.2 no changes
-
2.46.1
2024-09-13
-
2.46.0
2024-07-29
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.3 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.6 no changes
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.37.3 → 2.39.5 no changes
-
2.37.2
2022-08-11
- 2.36.1 → 2.37.1 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 no changes
-
2.34.0
2021-11-15
- 2.33.3 → 2.33.8 no changes
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.27.1 no changes
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 no changes
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
НАЗВАНИЕ
git-diff-tree - Сравнение содержимого и режима blob-объектов, найденных через два объекта-дерева
ОБЗОР
git diff-tree [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r] [-c | --cc] [--combined-all-paths] [--root] [--merge-base] [<общие-параметры-diff>] <указатель-дерева> [<указатель-дерева>] [<путь>…]
ОПИСАНИЕ
Сравнить содержимое и режим доступа к файлу blob-объектов, найденных через два объекта-дерева.
Если задан только один <указатель-дерева>, коммит сравнивается с его родительскими коммитами (см. --stdin
ниже).
Обратите внимание, что git diff-tree может использовать дерево, инкапсулированное в объекте коммита.
ПАРАМЕТРЫ
-
-p
-
-u
-
--patch
-
Сгенерировать патч (см. Создание патчей с помощью -p).
-
-s
-
--no-patch
-
Подавлять весь вывод от утилиты сравнения (включая в частности собственно список изменений). Полезно для команд, вроде
git show
, чтобы подавить вывод патча, который иначе показывается по умолчанию; или чтобы отменить эффект таких параметров, как--patch
, или--stat
, указанных ранее в командной строке (например для команды сокращения (alias)). -
-U<n>
-
--unified=<n>
-
Генерировать списки изменений с <n> строками контекста вместо обычных трёх. Подразумевает
--patch
. -
--output=<файл>
-
Выводить в указанный файл вместо стандартного вывода.
-
--output-indicator-new=<символ>
-
--output-indicator-old=<символ>
-
--output-indicator-context=<символ>
-
Задаёт символ, используемый для обозначения новых, старых или контекстных строк в сгенерированном патче. Обычно это
+
,-
и ` ` соответственно. -
--raw
-
Сгенерировать список изменений в сыром формате. Это действие по умолчанию.
-
--patch-with-raw
-
Синоним для
-p --raw
. -
--indent-heuristic
-
Применять эвристику, которая сдвигает границы блоков списков изменений, дабы сделать патчи более удобными для чтения. Это поведение включено по умолчанию.
-
--no-indent-heuristic
-
Не применять эвристику сдвига границ блоков.
-
--minimal
-
Потратить дополнительное время, чтобы гарантировать, что будет сгенерирован минимально возможный список изменений.
-
--patience
-
Генерировать списки изменений с помощью «терпеливого» алгоритма (patience diff).
-
--histogram
-
Генерировать списки изменений с помощью «гистограммного» алгоритма (histogram diff).
-
--anchored=<текст>
-
Генерировать списки изменений с помощью алгоритма поиска различий «с якорем» (anchored diff).
Этот параметр может быть указана несколько раз.
Если строка существует как в источнике, так и в назначении, встречается только один раз и начинается с <текста>, этот алгоритм пытается не допустить, чтобы эта строка была обозначена в выводе как удаляемая или добавляемая. Для собственно поиска отличий используется «терпеливый» алгоритм.
-
--diff-algorithm=(patience|minimal|histogram|myers)
-
Выберите алгоритм для получения списка изменений. Доступны следующие варианты:
-
default
-
myers
-
Базовый жадный алгоритм, используемый в стандартной утилите сравнения (
diff
). В настоящее время это значение по умолчанию. -
minimal
-
Потратить дополнительное время, чтобы гарантировать, что будет сгенерирован минимально возможный список изменений.
-
patience
-
Используйте «терпеливый» алгоритм сравнения (patience diff) для генерации патчей.
-
histogram
-
Этот алгоритм расширяет «терпеливый» алгоритм так, что он «поддерживает общие элементы с низкой частотой встречаемости».
В частности, если вы настроили переменную
diff.algorithm
на нестандартное значение и хотите использовать стандартный алгоритм, то следует задать параметр--diff-algorithm=default
. -
-
--stat[=<ширина>[,<ширина-имени>[,<число>]]]
-
Генерировать статистику изменений diffstat. По умолчанию для имени файла используется столько места, сколько необходимо, а остаток — для графика. Максимальная <ширина> по умолчанию равна ширине терминала или 80 столбцам, если вывод производится не на терминал. Ширину части, отводящейся под имя файла, можно ограничить, указав <ширину-имени> после запятой или установив переменную конфигурации
diff.statNameWidth=<ширина-имени>
. Ширина части, отводящейся под график также можно ограничить с помощью--stat-graph-width=<ширина-графика>
или переменной конфигурацииdiff.statGraphWidth=<ширина-графика>
. Все команды, генерирующие статистические графики принимают параметры--stat
или--stat-graph-width
, а установка переменныхdiff.statNameWidth
илиdiff.statGraphWidth
влияет на все команды кромеgit format-patch
. При указании третьей части аргумента вывод ограничивается указанным <числом> строк, а при его превышении вместо оставшихся строк будет выведено...
.Эти параметры также могут быть установлены в индивидуальном порядке с помощью
--stat-width=<ширина>
,--stat-name-width=<ширина-имени>
и--stat-count=<число>
. -
--compact-summary
-
Выводить в статистике diffstat краткую выжимку информации, содержащейся в расширенном заголовке, в частности, был ли файл создан или удалён («new» или «gone», и возможно с «
+l
», если это символическая ссылка) и был ли изменён режим доступа к нему (+x
или-x
для добавления или удаления исполняемого бита соответственно). Эта информация помещается между имени файла и графиком. Подразумевает--stat
. -
--numstat
-
Аналогичен
--stat
, но показывает количество добавленных и удалённых строк в десятичном формате и полный путь к файлу без сокращения, что делает его более удобным для машинной обработки. Для бинарных файлов выводит две чёрточки-
вместо0 0
. -
--shortstat
-
Выводить только последнюю строку, выводимую
--stat
, содержащую общее количество изменённых файлов, а также количество добавленных и удалённых строк. -
-X [<аргумент>,...]
-
--dirstat[=<аргумент>,...]
-
Вывести распределение относительного количества изменений для каждого подкаталога (т.е. какой процент от общего числа изменений приходится на каждый конкретный каталог). Поведение
--dirstat
можно модифицировать, передавая ему список аргументов, разделённых запятыми. Аргументы по умолчанию контролируются переменной конфигурации diff.dirstat (см. git-config[1]). Доступные аргументы:-
changes
-
Подсчитывать количество строк, которые были удалены или добавлены. Этот алгоритм игнорирует чистые перемещения кода внутри файла. Другими словами, строки перемещённые внутри файла без изменений не учитываются в отличии от других правок. Это поведение по умолчанию, когда аргумент не указан.
-
lines
-
Подсчитывает количество строк с использованием обычного алгоритма поиска изменений, основываясь на строках и суммируя количество удалённых/добавленных строк. (Для бинарных файлов подсчитываются 64-байтовые блоки, так как у них нет естественного понятия «строк»). Это более затратный алгоритм работы
--dirstat
, чемchanges
, но он учитывает переставленные строки внутри файла так же, как и другие изменения. Вывод с этим алгоритмом лучше согласуется с теми данными, которые вы получаете от других параметров--*stat
. -
files
-
Подсчитывает количество изменённых файлов. При анализе каждый изменённый файл учитывается в равной степени. Это наиболее экономичный алгоритм
--dirstat
, так как он не требует просмотра содержимого файлов. -
cumulative
-
Для родительского каталога также учитывает изменения в дочерних подкаталогах. Обратите внимание, что при использовании
cumulative
сумма процентов может превышать 100%. Поведение по умолчанию (некумулятивное) можно задать с помощью аргументаnoncumulative
. - <число>
-
При использовании целочисленного значения в качестве аргумента, оно задаёт пороговое значение (по умолчанию 3%). Каталоги, изменения в которых составляют меньшую часть от общего числа изменений, чем указанный процент, не отображаются в выводе.
Пример: Следующая команда будет подсчитывать какую долю составляют файлы, которые были изменены в каждом конкретном каталоге, при этом игнорируя каталоги, на которые приходится менее 10% изменённых файлов и считая изменения в дочерних каталогов, как часть изменений в родительских:
--dirstat=files,10,cumulative
. -
-
--cumulative
-
Синоним для
--dirstat=cumulative
. -
--dirstat-by-file[=<аргумент>,...]
-
Синоним для
--dirstat=files,<аргумент>,...
. -
--summary
-
Вывести краткую сводку из информации, содержащейся в расширенных заголовках списков изменений. В частности, информацию о создании, переименовании и изменении режима доступа к файлу.
-
--patch-with-stat
-
Синоним для
-p --stat
. -
-z
-
Когда заданы параметры
--raw
,--numstat
,--name-only
или--name-status
, не вносить ни какие изменения в пути файлов и использовать NUL-символ в качестве разделителя полей вывода.Без данного параметра пути с «необычными» символами берутся в кавычки, как это описано для переменной конфигурации
core.quotePath
(см. git-config[1]). -
--name-only
-
Выводить только имена изменённых файлов в результирующем дереве. Имена файлов обычно используют кодировку UTF-8. Для более подробной информации о кодировках см. обсуждение на справочной странице git-log[1].
-
--name-status
-
Показывать только имя/имена и статус каждого изменённого файла. См., что означают буквы статуса, в описании параметра
--diff-filter
. Как и для--name-only
, имена файлов обычно используют кодировку UTF-8. -
--submodule[=<формат>]
-
Задаёт, как должны отображаться различия в подмодулях. При указании
--submodule=short
, используется форматshort
. Этот формат показывает только имена коммитов в начале и конце диапазона. При указании--submodule
или--submodule=log
используется форматlog
. Этот формат перечисляет все коммиты в диапазоне, как это делает git-submodule[1]summary
. При указании--submodule=diff
используется форматdiff
. Этот формат показывает различия в содержимом подмодуля между началом и концом диапазона в виде списка изменений, встроенного в основной. По умолчанию используется формат указанный в переменной конфигурацииdiff.submodule
илиshort
, если переменная не установлена. -
--color[=<когда>]
-
Выводить список изменений в цвете.
--color
(т.е. без аргумента=<когда>
) эквивалентно--color=always
. <когда> может быть одним из:always
,never
илиauto
. -
--no-color
-
Выключить выделение цветом при выводе списка изменений. Эквивалентно
--color=never
. -
--color-moved[=<режим>]
-
Перемещённые строки кода выделяются другим цветом. Если параметр не задан, то <режим> по умолчанию:
no
; если задан, но без явного указания <режима> — тоzebra
. Значение <режима> может быть одним из:-
no
-
Перемещённые строки ни как не выделяются.
-
default
-
Синоним для
zebra
. В будущем это может измениться, если появится режим получше. -
plain
-
Любая строка, добавленная в одном месте и удалённая в другом, будет окрашена с помощью
color.diff.newMoved
. Аналогичноcolor.diff.oldMoved
будет использоваться для удалённых строк, которые добавлены в каком-то другом месте. Этот режим подсвечивает все перемещённые строки, но при рецензировании кода знать был ли блок перемещён и при этом без какой-либо информации о перестановках не так уж и полезно. -
blocks
-
Для поиска блоков перемещённого текста (из не мене чем 20-и алфавитно-цифровых символов) используется жадный алгоритм. Найденные блоки окрашиваются с помощью
color.diff.(old|new)Moved
. Возможности различить смежные блоки нет. -
zebra
-
Поиск блоков перемещённого текста происходит так же, как и в режиме
blocks
. Блоки окрашиваются с помощьюcolor.diff.(old|new)Moved
илиcolor.diff.(old|new)MovedAlternative
. Изменение цвета с одного на другой указывает на то, что был найден новый блок. -
dimmed-zebra
-
Аналогично
zebra
, но также выполняется дополнительное затемнение «неинтересных» частей перемещённого кода. Интересными считаются пограничные строки двух соседних блоков, остальное — неинтересным.dimmed_zebra
— устаревший синоним.
-
-
--no-color-moved
-
Отключить поиск перемещений. Этот параметр можно использовать для переопределения настроек, заданных переменными конфигурации. Эквивалентно
--color-moved=no
. -
--color-moved-ws=<режим>,...
-
Задаёт должны ли игнорироваться пробелы при поиске перемещений для
--color-moved
. Следующие режимы могут быть указаны через запятую:-
no
-
Не игнорировать пробелы при поиске перемещений.
-
ignore-space-at-eol
-
Игнорировать изменения пробелов на концах строк.
-
ignore-space-change
-
Игнорировать изменения количества пробелов. Этот режим игнорирует пробелы на концах строк и считает все остальные последовательности одного или более пробельных символов эквивалентными.
-
ignore-all-space
-
Игнорировать все пробелы при сравнении строк. Это игнорирует различия даже если в одной строке пробелы есть там, где в другой их нет.
-
allow-indentation-change
-
Сначала игнорировать любые пробелы при обнаружении перемещений, а затем группировать перемещённые блоки кода в один только, если изменение пробелов одинаково для каждой строки блока. Этот режим несовместим с остальными.
-
-
--no-color-moved-ws
-
Не игнорировать пробелы при поиске перемещений. Этот параметр можно использовать для переопределения настроек, заданных переменными конфигурации. Эквивалентно
--color-moved-ws=no
. -
--word-diff[=<режим>]
-
По умолчанию слова разделены пробелами; см.
--word-diff-regex
ниже. Аргумент <режим> по умолчанию равенplain
, и должен быть одним из:-
color
-
Выделять изменённые слова только цветом. Подразумевает
--color
. -
plain
-
Отображать слова как
[-удалено-]
и{
. Этот нежим не пытается экранировать разделители, если они появляются во входных данных, поэтому вывод может быть неоднозначным.добавлено
} -
porcelain
-
Использовать специальный построчный формат, предназначенный для программной обработки сценариями. Добавленные/удалённые/неизменённые участки строк исходных документах выводятся в виде обычного унифицированного списка изменений: каждый участок записывается на отдельной строке, начинающейся, соответственно, с символов
+
/-
/` ` и продолжается до конца строки. А собственно переводы строк во входных данных представляются в виде тильды~
на отдельной строке. -
none
-
Отключить сравнение слов; снова.
Обратите внимание, что несмотря на название первого режима, цвет используется для выделения изменённых частей во всех режимах, если он включён.
-
-
--word-diff-regex=<регулярное-выражение>
-
Использовать <регулярное_выражение> для определения того, что является словом, вместо того, чтобы считать словом любую последовательность непробельных символов. Также подразумевает параметр
--word-diff
, если он не было указан до этого.Каждая подстрока, не перекрывающаяся с другими и сопоставленная <регулярному_выражению> считается словом. Всё, что находится между ними, считается пробелами и игнорируется(!) при поиске различий. Возможно, вам понадобиться добавить
|[^[:space:]]
к вашему регулярному выражению, чтобы быть уверенным, что оно будет сопоставлено с любой непробельным символом. Сопоставленная подстрока, содержащая перевод строки, по-тихому обрезается(!) на символе перевода строки.Например,
--word-diff-regex=.
будет обращаться с каждым символом как со словом и, соответственно, показывать различия символ к символу.Это регулярное выражение также можно задать через драйвер пользовательской утилиты сравнения или переменные конфигурации; см. gitattributes[5] или git-config[1]. Явное указание этого параметра переопределяет любое значение, заданное в драйвере или переменной конфигурации. Кроме того, драйверы переопределяют значения, заданные в переменных конфигурации.
-
--color-words[=<регулярное-выражение>]
-
Эквивалентно
--word-diff=color
плюс (если указано регулярное выражение)--word-diff-regex=<регулярное_выражение>
. -
--no-renames
-
Отключить обнаружение переименований, даже если в файле конфигурации оно включено по умолчанию.
-
--[no-]rename-empty
-
Определяет, рассматривать ли пустые бинарные объекты, как возможные источники переименований.
-
--check
-
Предупреждать, если изменения включают маркеры конфликтов или ошибки расстановки пробелов. Что именно считается ошибками расстановки пробелов, настраивается с помощью переменной конфигурации
core.whitespace
. По умолчанию такими ошибками считаются пробелы в конце строк (включая строки, состоящие только из пробелов), а также пробел внутри начального отступа строки, непосредственно за котором следует табуляция. Программа завершится с ненулевым статусом, если такие проблемы будут обнаружены. Не совместимо с--exit-code
. -
--ws-error-highlight=<тип>
-
Выделять цветом ошибки расстановки пробелов в строках
context
(контекстных),old
(старых) илиnew
(новых) в списке изменений. Допустимо несколько значений, разделённых запятой;none
сбрасывает предыдущие значения,default
сбрасывает список доnew
, аall
— это сокращение дляold,new,context
. Если этот параметр не указан, и переменная конфигурацииdiff.wsErrorHighlight
не установлена, то ошибки расстановки пробелов будут выделятся только в новых строках. Для выделения используется цвет, указанный в переменной конфигурацииcolor.diff.whitespace
. -
--full-index
-
Вместо первых нескольких символов показывать полные имена blob-объектов в строке «index» при выводе патча.
-
--binary
-
Выводить список изменений в бинарных файлах, который может быть применён с помощью
git-apply
. Также подразумевает--full-index
. Подразумевает--patch
. -
--abbrev[=<n>]
-
Вместо вывода полных 40-байтовых шестнадцатеричных имён объектов в списках изменений в сыром формате, а также в строках заголовков diff-tree, выводить их минимальный префикс, который имеет как минимум <n> шестнадцатеричных цифр и уникально идентифицирует объект. Однако, при выводе списка изменений в виде патча параметр
--full-index
имеет приоритет, т.е. если задан параметр--full-index
, будут выведены полные имена блоков, независимо от того, задан ли--abbrev
. Количество выводимых цифр отличное от значения по умолчанию можно задать с помощью--abbrev=<n>
. -
-B[<n>][/<m>]
-
--break-rewrites[=[<n>][/<m>]]
-
Разбивать изменения, которые полностью переписывают файл на пары удаления и создания. Этот параметр служит двум целям:
Влияет на то, как правка, которая по сути представляет собой полное переписывание файла, отображается в списке изменений не как серия удалений и вставок, смешанных с несколькими строками «контекста», которые оказались таковыми лишь по случайному стечению обстоятельств, а как одно единое удаление старого файла целиком, за которым следует создание нового файла. Число <m>(по умолчанию 60%) в аргументе параметра
-B
задаёт, какая часть файла должна быть изменена, чтобы он считался полностью переписанным. Например,-B/70%
указывает, что, чтобы Git считал файл полностью переписанным, в нём должно оставаться нетронутым менее 30% исходного содержимого (т.е. в случае, если нетронутыми будут больше 30% объёма файла, полученный патч будет серией удалений и вставок, смешанных с контекстными строками, как при обычном выводе).При использовании совместно с
-M
, полностью переписанный файл также рассматривается как возможный источник переименований (обычно-M
рассматривает в качестве таковых только файлы, которые были удалены). Число <n>(по умолчанию 50%) в аргументе параметра-B
задаёт, какая часть файла должна быть изменена, чтобы он рассматривался как возможный источник переименований. Например, при указании-B20%
для того, чтобы файл рассматривался в качестве такового, изменения в нём (включая добавления и удаления строк) должны составлять более 20% файла. -
-M[<n>]
-
--find-renames[=<n>]
-
Обнаруживать переименования. Если указан аргумент <n>, то это значение является пороговым коэффициентом сходства (т.е. количеством добавлений/удалений по отношению к размеру файла). Например,
-M90%
означает, что Git должен считать пару файлов удалённый/добавленый переименованием, если более 90% файла не изменилось. Без знака процента%
это число рассматривается как дробная часть десятичной дроби (т.е. с нулём и десятичной точкой перед числом). Так например,-M5
рассматривается «0.5» и таким образом эквивалентно-M50%
. Аналогично,-M05
эквивалентно-M5%
. Чтобы ограничиться обнаружением только переименований без изменений, используйте-M100%
. По умолчанию коэффициент сходства равен 50%. -
-C[<n>]
-
--find-copies[=<n>]
-
Обнаруживать копии наряду с переименованиями. См. также
--find-copies-harder
. Аргумент <n>, если указан, имеет то же значение, что и в-M<n>
. -
--find-copies-harder
-
По соображениям производительности, по умолчанию параметр
-C
рассматривает в качестве исходных файлов копий только те файлы, которые были изменены в том же наборе изменений. Этот флаг заставляет команду рассматривать в качестве кандидатов на роль источника копии также и неизмененные файлы. Для больших проектов это очень дорогая операция, поэтому используйте её с осторожностью. Передача параметра-C
более одного раза имеет тот же эффект. -
-D
-
--irreversible-delete
-
Опускать исходное содержимое файла при его удалении, т.е. выводить только заголовок, но не «различия» между удаляемым файлом и
/dev/null
. Полученный патч не предназначен для применения с помощьюpatch
илиgit apply
, а исключительно для тех людей, кто хочет сосредоточиться на рецензировании или просмотре различий после внесения изменений. Кроме того, с таким патчем, очевидно, не будет возможности обратить изменения, даже вручную; отсюда и название параметра: «irreversible» — необратимый.При использовании совместно с
-B
, опускается также и содержимое удаляемой части в паре «удаление/создание». -
-l<число>
-
Выполнение поиска для параметров
-M
и-C
происходит в два этапа: сначала производится некоторый предварительные шаги, которые позволяют дёшево обнаружить лишь часть переименований/копирований, а затем следует исчерпывающая часть поиска, на которой все оставшиеся назначения для которых не было найдено пары сравниваются со всеми подходящими для них источниками. (Для переименований подходящими считаются только те источники, которым ещё не были найдены пары; для копирований — все исходные источники.) Для N возможных файлов источников и назначений эта исчерпывающая проверка имеет сложность O(N^2). Данный параметр предотвращает запуск исчерпывающей части поиск переименований/копирований, если количество файлов источников/назначений превышает указанное <число> (по умолчанию:diff.renameLimit
). Обратите внимание, что значение0
означает, что это количество файлов неограниченно. -
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
-
Выбирать только файлы, которые были добавлены (
A
, Added), скопированы (C
, Copied), удалены (D
, Deleted), изменены (M
, Modified), переименованы (R
, Renamed), чей тип (т.е. обычный файл, символическая ссылка, подмодуль, …) был изменён (T
, Type), не слиты (U
, Unmerged), неизвестны (X
) или имеют сломанную связь (B
, Broken). Может быть задано любое подмножество символов фильтра (включая пустое). При добавлении*
(всё или ничего) к аргументам, то или выбираются все пути, если существует хотя бы один файл, соответствующий остальным критериям, или ничего, если такого файла нет.Также если вместо этих прописных букв задать их строчные версии, то соответствующие этому критерию файлы будут наоборот исключены. Например,
--diff-filter=ad
исключает добавленные и удалённые пути.Обратите внимание, что не все списки изменений могут обеспечить доступ ко всем типам изменений. В частности, записи о переименованиях и копированиях не будут доступны, если обнаружение для этих типов не было включено.
-
-S<строка>
-
Искать различия, которые изменяют количество вхождений указанной <строки> в файле (т.е. её добавления/удаления, но не изменения/перемещения). Предназначено для использования в скриптах.
Это полезно, если вы ищете точный блок кода (например, структуру), и хотите знать историю этого блока с момента его появления: вызывайте эту функцию последовательно несколько раз, передавая полученный на очередном шаге интересующий вас блок обратно в
-S
, и продолжайте так до тех пор, пока не получите самую первую версию этого блока.Поиск происходит также и в бинарных файлах.
-
-G<регулярное-выражение>
-
Искать списки изменений, текст патча которых содержит добавление/удаление строк, соответствующих <регулярному_выражению>.
Чтобы проиллюстрировать разницу между
-S<регулярное_выражение>
--pickaxe-regex
и-G<регулярное_выражение>
, рассмотрим коммит со следующими различиями в одном и том же файле:+ return frotz(nitfol, two->ptr, 1, 0); ... - hit = frotz(nitfol, mf2.ptr, 1, 0);
В то время как команда
git log -G"frotznitfol"` выведет этот коммит, `git log -S"frotznitfol" --pickaxe-regex
— не выведет (потому что количество вхождений этой строки не изменилось).Если не указан параметр
--text
и для данного типа файлов нет фильтра textconv, изменения вносимые патчами в бинарные файлы будут проигнорированы.См. раздел pickaxe в gitdiffcore[7] для более подробной информации.
-
--find-object=<id-объекта>
-
Искать различия, которые меняют количество вхождений указанного объекта. Аналогично
-S
, но в качестве аргумента вместо конкретной строки для поиска передаётся идентификатор конкретного объекта.Объект может быть blob-объектом или коммитом в подмодуле. Этот параметр также подразумевает
-t
вgit-log
, для поиска деревьев. -
--pickaxe-all
-
Когда поиске с помощью параметров
-S
или-G
находит изменения, показывать все изменения в данном наборе, а не только в тех файлах, которые содержат изменения в заданной <строке>. -
--pickaxe-regex
-
Обрабатывать <строку>, переданную в
-S
, как расширенное регулярное выражение POSIX с котором должно производится сопоставление. -
-O<файл-порядка>
-
Контролирует порядок, в котором файлы появляются в выводе. Этот параметр переопределяет значение указанное в переменной конфигурации
diff.orderFile
(см. git-config[1]). Чтобы отменить использование файла указанного вdiff.orderFile
, используйте-O/dev/null
.Порядок вывода определяется порядком glob-шаблонов в <файле-порядка>. Первыми выводятся все файлы, пути которых соответствуют первому шаблону, затем файлы, соответствующие второму шаблону (но не первому), и так далее. Все файлы, которые не соответствуют ни одному из шаблонов, выводятся в конце, как если бы в конце файла был неявно задан шаблон, который сопоставляется всем путям. Пути одного ранка (которые соответствуют какому-либо одному шаблону, но не одному из предыдущих) относительно друг друга выводятся в нормальном порядке.
Синтаксис <файла-порядка> следующий:
-
Пустые строки игнорируются, так что их можно использовать для улучшения читаемости.
-
Строки, начинающиеся с символа решётки («
#
»), игнорируются, их можно использовать для комментариев. Если шаблон начинается с решётки, добавьте обратный слэш («\
») перед ней. -
Все остальные строки являются шаблонами; по одному на строку.
Синтаксис и семантика у этих шаблонов те же, что и у шаблонов, используемых для
fnmatch
(3) без флагаFNM_PATHNAME
, за исключением того, что путь к файлу также сопоставляются шаблону; при этом в качестве пути к файлу сопоставляется путь к его родительскому каталогу любого уровня. Например, шаблону «foo*bar
» будет соответствовать какfooasdfbar
, так и «foo/bar/baz/asdf
», но не «foobarx
». -
-
--skip-to=<файл>
-
--rotate-to=<файл>
-
Пропускать в выводе файлы до указанного <файла> (со
--skip-to
), или вывести их в конец (с--rotate-to
). Эти параметры были добавлены в первую очередь для использования в командеgit difftool
и, вероятно, от них будет не так много пользы в других командах. -
-R
-
Поменять местами два входных файла; т.е. показывать, какие изменения произошли бы при переходя от версии файла в индексе или на диске к той, что содержится в дереве коммита.
-
--relative[=<путь>]
-
--no-relative
-
При запуске из одного из подкаталогов проекта этот параметр позволяет исключить изменения за пределами этого каталога и отображать пути относительно него. Если вы не находитесь в каком-либо подкаталоге (например, в голом репозитории), можно указать подкаталог, относительно которого будет производиться вывод, передав <путь> в качестве аргумента. Параметр
--no-relative
можно использовать как для отмены эффекта от переменной конфигурацииdiff.relative
, так и предшествующего параметра--relative
. -
-a
-
--text
-
Обрабатывать все файлы как текстовые.
-
--ignore-cr-at-eol
-
Игнорировать символы возврата каретки в конце строк при сравнении.
-
--ignore-space-at-eol
-
Игнорировать изменения пробелов на концах строк.
-
-b
-
--ignore-space-change
-
Игнорировать изменения количества пробелов. Этот режим игнорирует пробелы на концах строк и считает все остальные последовательности одного или более пробельных символов эквивалентными.
-
-w
-
--ignore-all-space
-
Игнорировать все пробелы при сравнении строк. Это игнорирует различия даже если в одной строке пробелы есть там, где в другой их нет.
-
--ignore-blank-lines
-
Игнорировать изменения, в которых все строки пустые.
-
-I<регулярное-выражение>
-
--ignore-matching-lines=<регулярное-выражение>
-
Игнорировать изменения, в которых все строки сопоставляются <регулярному-выражению>. Этот параметр может быть указан несколько раз.
-
--inter-hunk-context=<число>
-
Выводить в качестве контекста между блоками изменений до указанного <числа> строк, тем самым объединяя близкие блоки изменений. По умолчанию равно значению переменной конфигурации
diff.interHunkContext
или 0, если оно не установлено. -
-W
-
--function-context
-
Показывать всю функцию в качестве контекста для каждого изменения. Для определения имён функций используется тот же механизм, что и для определения заголовков блоков изменений командой
git diff
(см. «Определение пользовательского заголовка блока» в gitattributes[5]). -
--exit-code
-
Сделать так, чтобы программа завершалась с определённым кодом, аналогично тому, как это делает команда
diff
(1). То есть при наличии различий она будет завершаться с кодом 1, а при отсутствии — с кодом 0. -
--quiet
-
Отключить весь вывод у данной программы. Подразумевает
--exit-code
. Также отключает выполнение вспомогательных сторонних утилит сравнения, коду завершения которых нельзя доверять, т.е. если для них не установлена переменная конфигурацииdiff.trustExitCode
илиdiff.
<драйвер>.trustExitCode
, а также если переменная окруженияGIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
ложна. -
--ext-diff
-
Разрешить выполнение вспомогательных сторонних утилит сравнения. Если вы настроили драйвер сторонней утилиты сравнения с помощью gitattributes[5], то вам нужно будет использовать этот параметр с командой git-log[1] и другими подобными.
-
--no-ext-diff
-
Запретить драйверы сторонних утилит сравнения.
-
--textconv
-
--no-textconv
-
Разрешить (или запретить) преобразование бинарных файлов в текст с помощью внешних фильтров при их сравнении. См. подробности в gitattributes[5]. Полученный вывод подходит для восприятия человеком, но поскольку фильтры
textconv
обычно представляют из себя одностороннее преобразование, полученный патч нельзя будет применить. По этой причине фильтрыtextconv
по умолчанию включены только для git-diff[1] и git-log[1], но не для git-format-patch[1] или низкоуровневых команд сравнения. -
--ignore-submodules[=(none|untracked|dirty|all)]
-
Игнорировать изменения в подмодулях при создании вывода. Значением по умолчанию является
all
. При использовании значенияnone
будет считаться, что подмодуль изменён, если он содержит неотслеживаемые или изменённые файлы или если егоHEAD
отличается от коммита, зафиксированного в надпроекте и может быть использовано для переопределения любых переменных конфигурации сignore
в git-config[1] или gitmodules[5]. При использованииuntracked
подмодули не считаются грязными только из-за того, что они содержат неотслеживаемые файлы (но они всё равно проверяются на наличие изменений в содержимом). При использованииdirty
игнорируются все изменения в рабочих каталогах подмодулей и показываются только изменения коммитов, хранящихся в надпроекте (таким было поведение до версии 1.7.0). При использованииall
все изменения в подмодулях скрываются. -
--src-prefix=<префикс>
-
Использовать указанный <префикс> для источника вместо «a/».
-
--dst-prefix=<префикс>
-
Использовать указанный <префикс> для назначения вместо «b/».
-
--no-prefix
-
Не выводить ни префикс источника, ни назначения.
-
--default-prefix
-
Использовать стандартные префиксы источника и назначения («a/» и «b/»). Это переопределяет такие переменные конфигурации, как
diff.noprefix
,diff.srcPrefix
,diff.dstPrefix
, иdiff.mnemonicPrefix
(см. git-config[1]). -
--line-prefix=<префикс>
-
Добавить дополнительный <префикс> к каждой строке вывода.
-
--ita-invisible-in-index
-
По умолчанию записи, добавленные командой
git add -N
, отображаются в выводеgit diff
как существующий пустой файл, а в выводе git diff --cached` — как новый файл. Этот параметр делает так, что такие записи отображаются как новый файл в выводеgit diff
и отсутствовать в выводеgit diff --cached
. Этот параметр может быть переопределён с помощью--ita-visible-in-index
. Оба эти параметра являются экспериментальными и могут быть удалены в будущем.
См. gitdiffcore[7] для более подробного описания этих общих параметров.
- <указатель-дерева>
-
Идентификатор объекта-дерева.
- <путь>…
-
Если заданы, результаты ограничиваются подмножеством файлов, соответствующих одному из указанных спецификаторов путей.
- -r
-
Рекурсивно обходить поддеревья.
- -t
-
Отображать саму запись дерева, а также поддеревья. Подразумевает
-r
. - --root
-
Когда задан параметр
--root
, начальный коммит будет отображаться как событие создание большого количества объектов, что эквивалентно сравнению с пустым деревом. - --merge-base
-
Вместо непосредственного сравнения между двумя <указателями-дерева>, использовать их базу слияния в качестве начального состояния. Должны быть указаны два <указателя-дерева>, и оба должны быть коммитами.
- --stdin
-
Когда задан параметр
--stdin
, команда не принимает <указатели-дерева> в качестве аргументов командной строки. Вместо этого она считывает строки, содержащие либо два <дерева>, либо один <коммит>, либо список <коммитов> из стандартного ввода. (Используйте один пробел в качестве разделителя.)Когда заданы два дерева, команда сравнивает первое дерево со вторым. Когда задан один коммит — коммит сравнивается с его родителями. Остальные коммиты, если заданы, используются так, как если бы они были родителями первого коммита.
При сравнении двух деревьев перед списком изменений выводятся идентификаторы обоих деревьев (разделённые пробелом и завершаемые переводом строки). При сравнении коммитов — идентификатор первого (или единственного) коммита (за которым следует перевод строки).
Следующие флаги оказывают дополнительное влияние на поведение при сравнении коммитов (но не деревьев).
- -m
-
По умолчанию
git diff-tree --stdin
не показывает списки изменений для коммитов слияний. С этим флагом выводятся списки изменений для таких коммитов относительно всех его родителей. См. также-c
. - -s
-
По умолчанию
git diff-tree --stdin
показывает списки изменений либо в машиночитаемой форме (без-p
), либо в форме патча (с-p
). Этот вывод можно подавить. Данный параметр полезен только с флагом-v
. - -v
-
Этот флаг заставляет git diff-tree --stdin также отображать сообщение коммита перед списком изменений.
Warning
|
Missing See original version for this content. |
- --no-commit-id
-
git diff-tree
выводит строку с идентификатором коммита, когда это применимо. Этот флаг подавляет вывод идентификатора коммита. - -c
-
Этот флаг изменяет способ отображения коммита слияния (что означает, что он полезен только тогда, когда команде задан либо один <указатель-дерева>, либо
--stdin
). Когда он задан выводятся список изменений результата слияния относительно всех его родителей одновременно, а не попарно между каждым из родителей и результатом слияния (как это происходит с параметром-m
). Кроме того, он перечисляет только те файлы, которые были изменены относительно всех родителей. - --cc
-
Этот флаг изменяет способ отображения коммита слияния подобно тому, как это делает параметр
-c
. Он подразумевает параметры-c
и-p
и дополнительно ужимает выводимый патч, опуская неинтересные блоки, содержимое которых у родителей присутствует только в двух вариантах, а результат слияния просто выбирает один из них без изменений. Когда все блоки, составляющие коммит, являются «неинтересными», сам коммит и его сообщение не выводятся, так же, как и в случае любого другого «пустого» списка изменений. - --combined-all-paths
-
Этот флаг заставляет комбинированные списки изменений (используемые для коммитов слияния) перечислять имена файла во всех его родителях. Таким образом, этот параметр имеет эффект только, когда используется совместно с -c или --cc, и, вероятно, полезен только в том случае, если будут обнаружены изменения имени файла (т.е. когда включено обнаружение переименования или копирования).
- --always
-
Показывать сам коммит и сообщение коммита, даже если его список изменений пуст.
СТРУКТУРИРОВАННЫЕ ФОРМАТЫ
Если коммит является слиянием, и структурированный формат отличен от oneline, email или raw, то перед строкой «Author:» добавляется дополнительная строка «Merge:», содержащая хеши родительских коммитов, разделённые пробелами. Обратите внимание, что если вы ограничили то, какая часть истории отображается: например, если вы заинтересованы только в изменениях, связанных с определенным каталогом или файлом, то перечисленные коммиты не обязательно должны быть прямыми родительскими коммитами.
Есть несколько встроенных форматов, и вы также можете определить дополнительные форматы, задав в переменной конфигурации вида pretty.<name>
либо имя другого формата, либо строку вида «format:», как описано ниже (см. git-config[1]). Встроенные форматы выглядят следующим образом:
-
oneline
<хеш> <строка-заголовка>
Этот формат задуман так, чтобы он был настолько компактным, насколько это возможно.
-
short
commit <хеш> Author: <автор>
<строка-заголовка>
-
medium
commit <хеш> Author: <автор> Date: <дата-создания>
<строка-заголовка>
<полное-сообщение-коммита>
-
full
commit <хеш> Author: <автор> Commit: <коммиттер>
<строка-заголовка>
<полное-сообщение-коммита>
-
fuller
commit <хеш> Author: <автор> AuthorDate: <дата-создания> Commit: <коммиттер> CommitDate: <дата-коммита>
<строка-заголовка>
<полное-сообщение-коммита>
-
reference
<краткий-хеш> (<строка-заголовка>, <короткая-дата-создания>)
Этот формат используется для ссылки на другие коммиты в сообщении коммита и совпадает с
--pretty='format:%C(auto)%h (%s, %ad)'
. По умолчанию дата форматируется с помощью--date=short
, если другой параметр--date
не указан явно. Как и в случае со всемиformat:
, содержащими метки-заполнители формата, на его вывод не влияют другие параметры, такие как--decorate
и--walk-reflogs
. -
email
From <хеш> <дата> From: <автор> Date: <дата-создания> Subject: [PATCH] <строка-заголовка>
<полное-сообщение-коммита>
-
mboxrd
Аналогичен email, но строки в сообщении коммита, начинающиеся с «From » (перед которыми стоит ноль или более «>»), экранируются с помощью «>», чтобы их нельзя было перепутать с началом нового коммита.
-
raw
Формат raw показывает весь коммит точно так, как он хранится в объекте коммита. В частности, хеши отображаются полностью, независимо от того, используются ли параметр --abbrev или --no-abbrev, а в parents перечислены настоящие родительские коммиты, без учёта сращиваний или упрощения истории. Обратите внимание, что этот формат влияет только на внешний вид отображения коммитов, но не на то, как отображается список изменений, например, с помощью
git log --raw
. Чтобы получить полные имена объектов в сыром формате списка изменений, используйте--no-abbrev
. -
format:<строка-формата>
Формат format:<строка-фомата> позволяет указать, какую информацию вы хотите отобразить. Он несколько напоминает формат, используемый printf, с тем различием, что для получения новой строки нужно использовать %n вместо \n.
Например, format:"Автором %h был %an, %ar%nЗаголовок >>%s<<%n" выведет что-то вроде:
Автором fe6e0ee был Junio C Hamano, 23 hours ago Заголовок >>t4119: проверка автовычисления -p<n> для традиционного вывода diff.<<
Возможные метки-заполнители включают:
-
Метки-заполнители, которые раскрываются в один конкретный символ:
-
Метки-заполнители, которые влияют на форматирование последующих меток-заполнителей:
- %Cred
-
переключить цвет на красный
- %Cgreen
-
переключить цвет на зелёный
- %Cblue
-
переключить цвет на синий
- %Creset
-
сбросить цвет на стандартный
- %C(…)
-
спецификация цвета, как описано в разделе «ФАЙЛ КОНФИГУРАЦИИ» в git-config[1]. По умолчанию цвета отображаются только тогда, когда они включены для вывода журнала (с помощью
color.diff
,color.ui
или--color
и с учётом значенияauto
для первого, если вывод производится на терминал). Исторически,%C(auto,...)
принимается как синоним для значения по умолчанию (например,%C(auto,red)
). Указание%C(always,...)
покажет цвета, даже если цвет не включён за счёт прочих значений (хотя подумайте о том, не стоит ли просто использовать--color=always
для того, чтобы включить цвет для всего вывода, включая как этот формат, так и всё остальное, что git выводиться в цвете).auto
сам по себе (т.е.%C(auto)
) включит автоматическую раскраску для последующих меток-заполнителей до тех пор, пока цвет не будет переключён снова. - %m
-
отметка, является ли коммит достижимым слева (
<
), справа (>
) или является ли он граничным (-
) - %w([<w>[,<i1>[,<i2>]]])
-
Включить/выключить перенос строк аналогично параметру -w команды git-shortlog[1].
- %<( <N> [,trunc|ltrunc|mtrunc])
-
сделать так, чтобы следующая метка-заполнитель занимала не менее N символов, добавляя пробелы справа по необходимости. Также при необходимости, если вывод длиннее N символов, строка также может быть усечена (с помощью двух точек «..») слева (ltrunc)
..во
, посередине (mtrunc)се..на
или справа (trunc)пра..
. Примечание 1: усечение строки корректно работает только при N >= 2. Примечание 2: пробелы вокруг значений N и M (см. ниже) необязательны. Примечание 3: эмодзи и другие широкие символы занимают место двух символов, так что это может привести к выходу за границы столбцов. Примечание 4: знаки объединения символов в декомпозиционной форме, находящиеся на границе области добавленных символов могут оказаться не на своём месте. - %<|( <M> )
-
сделать так, чтобы следующая метка-заполнитель занимала место как минимум до столбца M, добавляя пробелы справа по необходимости. Отрицательные значения M используются для отсчёта столбца от правого края окна терминала.
- %>( <N> ), %>|( <M> )
-
аналогично %<( <N> ) и %<|( <M> ) соответственно, но добавляют пробелы слева
- %>>( <N> ), %>>|( <M> )
-
аналогично %<( <N> ) и %<|( <M> ) соответственно, но если следующая метка-заполнитель занимает больше места, чем задано, и слева от неё есть пробелы, использовать эти пробелы
- %><( <N> ), %><|( <M> )
-
аналогично %<( <N> ) и %<|( <M> ) соответственно, но добавляют пробелы c обеих сторон (т.е. центрировать текст)
-
Метки-заполнители, которые раскрываются в информацию, извлекаемую из коммита:
- %H
-
хеш коммита
- %h
-
сокращённый хеш коммита
- %T
-
хеш объекта дерева каталогов
- %t
-
сокращённый хеш объекта дерева каталогов
- %P
-
хеши родителей
- %p
-
сокращённые хеши родителей
- %an
-
имя автора
- %aN
-
имя автора (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %ae
-
email автора
- %aE
-
email автора (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %al
-
имя пользователя email автора (часть до символа собаки «@»)
- %aL
-
имя пользователя (см. «%al») email автора с учётом .mailmap, см. git-shortlog[1] или git-blame[1]
- %ad
-
дата создания (формат соответствует параметру --date=)
- %aD
-
дата создания в формате RFC2822
- %ar
-
дата создания, относительная
- %at
-
дата создания, время UNIX
- %ai
-
дата создания в формате подобном ISO 8601
- %aI
-
дата создания в формате ISO 8601 (строго)
- %as
-
дата создания, короткий формат (
ГГГГ-ММ-ДД
) - %ah
-
дата создания, в человеческом виде (как при указании параметра
--date=human
git-rev-list[1]) - %cn
-
имя коммитера
- %cN
-
имя коммитера (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %ce
-
email коммитера
- %cE
-
email коммитера (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %cl
-
имя пользователя email коммитера (часть до символа собаки «@»)
- %cL
-
имя пользователя (см. «%al») email коммитера с учётом .mailmap, см. git-shortlog[1] или git-blame[1]
- %cd
-
дата коммита (формат соответствует параметру --date=)
- %cD
-
дата коммита в формате RFC2822
- %cr
-
дата коммита, относительная
- %ct
-
дата коммита, время UNIX
- %ci
-
дата коммита в формате подобном ISO 8601
- %cI
-
дата коммита в формате ISO 8601 (строго)
- %cs
-
дата коммита, короткий формат (
ГГГГ-ММ-ДД
) - %ch
-
дата коммита, в человеческом виде (как при указании параметра
--date=human
git-rev-list[1]) - %d
-
имена ссылок, как параметр --decorate команды git-log[1]
- %D
-
имена ссылок, без скобок «(» и «)».
- %(decorate[:<параметры>])
-
имена ссылок с настраиваемыми декораторами. За строкой
decorate
может следовать двоеточие и ноль или более параметров, разделённых запятыми. Значения параметров могут содержать литералы, представленные в виде кода форматирования. Они должны, в частности, использоваться для запятых (%x2C
) и закрывающих круглых скобок (%x29
) из-за того, что они имеют собственную роль в синтаксисе списка параметров.-
prefix=<значение>: Отображается перед списком имён ссылок. По умолчанию: «
(
» (nbsp — неразрывный пробел). -
suffix=<значение>: Отображается после списка имён ссылок. По умолчанию: «
)
». -
separator=<значение>: Отображается между именами ссылок. По умолчанию: «
,
». -
pointer=<значение>: Отображается между HEAD и веткой, на которую он указывает (если таковая есть). По умолчанию: «
->
». -
tag=<значение>: Отображается перед именами тегов. По умолчанию «
tag:
».
-
Например, для создания декоратора, не завёрнутого ни в какие скобки, без аннотации меток и с пробелами в качестве разделителей:
+
%(decorate:prefix=,suffix=,tag=,separator= )
- %(describe[:<параметры>])
-
имя, предназначенное для чтения человеком, как в git-describe[1]; пустая строка для коммитов, для которых невозможно создать описание. После
describe
может идти двоеточие и ноль или более параметров, разделённых запятыми. Описания могут быть непоследовательными, когда одновременно с этим добавляются или удаляются метки.-
tags[=<логическое-значение>]: Вместо того, чтобы рассматривать только аннотированные метки, рассматривать также и облегчённые.
-
abbrev=<число>: вместо стандартного количества шестнадцатеричных цифр для укороченного имени объекта (которое варьируется в зависимости от количества объектов в репозитории; по умолчанию: 7), использовать указанное <число> цифр или столько цифр, сколько необходимо для того, чтобы имя объекта было уникальным.
-
match=<шаблон>: Принимать во внимание только метки, соответствующие заданному шаблону
glob(7)
, не включая префикс «refs/tags/». -
exclude=<шаблон>: Не принимать во внимание метки, соответствующие заданному шаблону
glob(7)
, не включая префикс «refs/tags/».
-
- %S
-
имя ссылки, указанное в командной строке, по которой был достигнут коммит (как в
git log --source
), работает только сgit log
- %e
-
кодировка
- %s
-
заголовок коммита
- %f
-
очищенный заголовок коммита, подходящий для использования в качестве имени файла
- %b
-
тело
- %B
-
сырое тело (без дополнительных переносов строк в заголовке коммита и его теле)
- %N
-
заметки к коммиту
- %GG
-
сырое сообщение проверки GPG-подписи для подписанного коммита
- %G?
-
выводит «G» для хорошей (действительной) подписи, «B» для плохой подписи, «U» для хорошей подписи, но действительность ключа которой невозможно проверить, «X» для хорошей подписи с истёкшим сроком действия, «Y» для хорошей подписи, сделанной ключом с истёкшим сроком действия, «R» для хорошей подписи, сделанной отозванным ключом, «E», если подпись не может быть проверена (например если отсутствует ключ), и «N», если подписи нет
- %GS
-
выводит имя подписавшего для подписанного коммита
- %GK
-
выводит ключ, используемый для подписи подписанного коммита
- %GF
-
выводит отпечаток ключа, использованного для подписи подписанного коммита
- %GP
-
выводит отпечаток первичного ключа, чей подключ использовался для подписи подписанного коммита
- %GT
-
выводит уровень доверия для ключа, используемого для подписи подписанного коммита
- %gD
-
селектор журнала ссылок (
reflog
), например,refs/stash@{1}
илиrefs/stash@{2 minutes ago}
; формат такой же, как тот, что описан для параметра-g
. Часть перед@
— это имя ссылки, как указано в командной строке (поэтомуgit log -g refs/heads/master
выдастrefs/heads/master@{0}
). - %gd
-
сокращённый селектор журнала ссылок; то же, что и
%gD
, но та часть, которая является именем ссылки, сокращена для удобства чтения (поэтомуrefs/heads/master
становится простоmaster
). - %gn
-
имя, записанное в журнале ссылок
- %gN
-
имя, записанное в журнале ссылок (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %ge
-
email, записанный в журнале ссылок
- %gE
-
email, записанный в журнале ссылок (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])
- %gs
-
заголовок записи журнала ссылок
- %(trailers[:<параметры>])
-
выводит завершители тела коммита, которые интерпретируются git-interpret-trailers[1]. После строки
trailers
может идти двоеточие и ноль или более параметров, разделёнными запятыми. Если какой-либо параметр указан несколько раз, используется его последнее вхождение.-
key=<ключ>: выводить только завершители с указанным <ключём>. Сопоставление выполняется без учёта регистра, а завершающее двоеточие необязательно. Если параметр указан несколько раз, то отображаются строки завершителей, соответствующие любому из ключей. Этот параметр автоматически включает параметр
only
, так что те строки, которые сами не являются завершителями, но находятся в блоке завершителей, будут скрыты. Если это нежелательно, то это можно отключить с помощьюonly=false
. Например,%(trailers:key=Reviewed-by)
покажет завершители с ключомReviewed-by
. -
only[=<логическое-значение>]: следует ли включать строки, которые находятся в блоке завершителей, но сами не являются завершителями.
-
separator=<разделитель>: разделитель, вставляемый между строками завершителей. По умолчанию используется символ перевода строки. Строка <разделитель> может содержать литералы, представленные в виде кода форматирования. Чтобы использовать запятую в качестве разделителя, необходимо использовать
%x2C
, так как в противном случае она будет интерпретирована как следующий параметр. Например,%(trailers:key=Ticket,separator=%x2C )
показывает все завершители с ключом «Ticket», разделённые запятой и пробелом. -
unfold[=<логическое-значение>]: вести себя так, как если бы была задан параметр
--unfold
команды git interpret-trailer. Например,%(trailers:only,unfold=true)
разворачивает и показывает все строки завершителей. -
keyonly[=<логическое-значение>]: выводить только ключи завершителей.
-
valueonly[=<логическое-значение>]: выводить только значения завершителей.
-
key_value_separator=<разделитель>: задать разделитель, вставляемый между ключом и значением завершителей. По умолчанию используется «: ». Его семантика аналогична separator=<разделитель> выше.
-
-
Note
|
Некоторые метки-заполнители могут зависеть от других параметров, переданных движку обхода ревизий. Например, вместо параметров %g* , связанных с журналов ссылок (reflog ) будет подставляться пустая строка, если обход записей журнала ссылок (например, с помощью git log -g ) не производится. Метки-заполнители %d и %D будут использовать краткий формат («short»), если --decorate не был задан в командной строке.
|
Булевы параметры принимают необязательный аргумент [=<логическое-значение>]
. В качестве этих значений принимаются любые значения, принимаемые --type=bool
команды git-config[1], такие как yes
или off
. Указание булева параметра без =<значения>
эквивалентно тому, как если бы он был задан с =true
.
Если вы добавите +
(знак плюса) после %
в метке-заполнителе и если (и только если) она будет заменена на непустую строку, то непосредственно перед ней будет добавлен перевод строки.
Если вы добавите -
(знак минуса) после %
в метке-заполнителе и если (и только если) она будет заменена на непустую строку, то все непосредственно предшествующие ей переводы строк будут удалены.
Если вы добавите ` ` (пробел) после %
в метке-заполнителе и если (и только если) она будет заменена на непустую строку, то непосредственно перед ней будет добавлен пробел.
-
tformat:
Формат tformat: аналогичен format:, за исключением того, что он предоставляет семантику «терминатора» вместо семантики «разделителя». Другими словами, к каждому коммиту добавляется символ терминатора сообщения (обычно новая строка), а не разделитель, добавляемый между записями. Это означает, что последняя запись однострочного формата будет корректно завершена новой строкой также, как это сделано в формате «oneline». Например:
$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- НЕТ СИМВОЛА ПЕРЕВОДА СТРОКИ\n" unless /\n/' 4da45be 7134973 -- НЕТ СИМВОЛА ПЕРЕВОДА СТРОКИ $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- НЕТ СИМВОЛА ПЕРЕВОДА СТРОКИ\n" unless /\n/' 4da45be 7134973
Кроме того, любая нераспознанная строка, содержащая
%
, интерпретируется так, как если бы перед ней стояла строкаtformat:
. Например, следующие два примера эквивалентны:$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
Сырой формат вывода
Сырой формат вывода команд git-diff-index
, git-diff-tree
, git-diff-files
и git diff --raw
очень похож.
Все эти команды сравнивают два набора объектов, но то, что именно они сравнивают, отличается:
-
git-diff-index <указатель-дерева>
-
cравнивает <указатель-дерева> и файлы в файловой системе.
-
git-diff-index --cached <указатель-дерева>
-
сравнивает содержимое файлов по <указателю-дерева> и в индексе.
-
git-diff-tree [-r] <указатель-дерева-1> <указатель-дерева-2> [<шаблон>...]
-
сравнивает деревья, на которые указывают два аргумента.
-
git-diff-files [<шаблон>...]
-
сравнивает индекс и файлы в файловой системе.
Команда git-diff-tree
начинает свой вывод с печати хеша того, что сравнивается. После чего она как и все остальные команды выводят информацию об изменённых файлах: по одной строке на файл.
Строки вывода выглядят следующим образом:
изменения :100644 100644 bcd1234 0123456 M файл0 копирование-правка :100644 100644 abcd123 1234567 C68 файл1 файл2 переимещение-правка :100644 100644 abcd123 1234567 R86 файл1 файл3 создание :000000 100644 0000000 1234567 A файл4 удаление :100644 000000 1234567 0000000 D файл5 не-слитый :000000 000000 0000000 0000000 U файл6
Где, слева направо идут:
-
двоеточие (
:
). -
режим доступа «исходного» состояния; 000000 при создании файла или когда он не слит.
-
пробел.
-
режим доступа «целевого» состояния; 000000 при удалении файла или когда он не слит.
-
пробел.
-
SHA1 для «исходного» состояния; 0{40} при создании файла или когда он не слит.
-
пробел.
-
SHA1 для «целевого» состояния; 0{40} при удалении файла, когда он не слит или когда рабочая копия не синхронизирована с индексом.
-
пробел.
-
статус за которым может следовать «рейтинг схожести» («score»).
-
табуляция или NUL-символ (с параметром
-z
). -
«исходный» путь
-
табуляция или NUL-символ (с параметром
-z
); только для статусов C и R. -
«целевой» путь; только для статусов C и R.
-
символ LF или NUL (с параметром
-z
), который завершает запись.
Возможные обозначения для статуса:
-
A
: добавление файла (addition) -
C
: копирование файла в новый (copy) -
‘D’: удаление файла (deletion)
-
‘M’: изменение содержимого или режима доступа к файлу (modification)
-
‘R’: переименование файла (renaming)
-
T
: изменение типа файла: обычный файл, символическая ссылка или подмодуль (type) -
U
: файл не слит: вы должны будете завершить слияние, прежде чем будет возможно закоммитить файл (unmerged) -
X
: «неизвестный» тип изменения (вероятно это ошибка, пожалуйста, сообщите о ней)
Статусы C
и R
всегда сопровождаются рейтингом схожести (обозначающим процент сходства между исходным и целевым состоянием при перемещении или копировании). Статус M
также может сопровождаться рейтингом (обозначающим процент различий) для изменений файла.
Если файл в файловой системе ещё не синхронизирован с индексом, то SHA1 для «целевого» состояния будет отображается как строка из нулей.
Пример:
:100644 100644 5be4a4a 0000000 M файл.c
Без параметра -z
пути с «необычными» символами берутся в кавычки, как это описано для переменной конфигурации core.quotePath
(см. git-config[1]). С параметром -z
имя файла выводится без изменений, а строка завершается байтом NUL.
Формат списков изменений для слияний
Команды git-diff-tree
, git-diff-files
и git-diff --raw
принимают параметры -c
или --cc
, которые позволяют выводить списки изменений также и для коммитов слияний. Вывод отличается от описанного выше формата:
-
для каждого родителя добавляется дополнительное двоеточие
-
добавляются дополнительные режимы и SHA1 для «исходных» состояний
-
статус представляет собой строку из символов статусов для каждого родителя
-
нет (необязательного) значения «рейтинга схожести» («score»)
-
несколько путей файлов, разделённых табуляциями
Для параметров -c
и --cc
показываются только целевой или конечный путь к файлу, даже если файл был переименован в одном из предков. С --combined-all-paths
будут также выводиться пути в каждом из родителей, за которыми последует путь в коммите слияния.
Примеры для -c
и --cc
без --combined-all-paths
:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
Примеры, когда к -c
или --cc
добавляется --combined-all-paths
:
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
Обратите внимание, что в «комбинированном» формате в списке изменений перечисляются только те файлы, которые были изменены относительно всех родителей.
Создание патчей с помощью -p
Запуск команд git-diff[1], git-log[1], git-show[1], git-diff-index[1], git-diff-tree[1], или git-diff-files[1] с параметром -p
выдаёт текст патча. Вы можете изменить некоторые аспекты этого создаваемого текста с помощью переменных окружения GIT_EXTERNAL_DIFF
и GIT_DIFF_OPTS
(см. git[1]), а также атрибута diff
(см. gitattributes[5]).
Тот текст, которые получается на выходе при запуске с параметром -p
, немного отличается от традиционного формата списка изменений:
-
В начале идёт заголовок «git diff», который выглядит следующим образом:
diff --git a/файл1 b/файл2
Имена файлов
a/
иb/
одинаковы, если изменения не связаны с переименованием или копированием. В частности, даже для создания или удаления вместо имён файловa/
илиb/
не используется/dev/null
.Когда же изменения являются переименование или копирование,
file1
иfile2
отображают имена исходного файла и того, который получается в результате переименования/копирования, соответственно. -
Далее следуют одна или несколько строк расширенного заголовка:
old mode <режим> new mode <режим> deleted file mode <режим> new file mode <режим> copy from <путь> copy to <путь> rename from <путь> rename to <путь> similarity index <число> dissimilarity index <число> index <хеш>..<хеш> <режим>
Режимы файлов `<режим>` печатаются как 6-значные восьмеричные числа, включающие тип файла и биты разрешений.
Пути в расширенных заголовках не включают префиксы
a/
иb/
.Индекс сходства — это процент не изменённых строк, а индекс различия — процент изменённых. Он представляет собой округлённое вниз целое число, за которым следует знак процента. Индекс сходства в 100% зарезервирован для двух абсолютно одинаковых файлов, а 100% различий означает, что ни одна строка из старого файла не вошла в новый.
Строка индекса включает имена бинарных объектов до и после изменения. Строка <режима> добавляется, если режим файла не был изменён; в противном случае старый и новый режимы приводятся в отдельных строках.
-
Путей с «необычными» символами берутся в кавычки, как это описано для переменной конфигурации
core.quotePath
(см. git-config[1]). -
Все файлы
файл1
в выводе относятся к файлам до коммита, а все файлыфайл2
— к файлам после коммита. Неправильно было бы применять каждое изменение к каждому файлу последовательно. Например, следующий патч поменяет местамиa
иb
:diff --git a/a b/b rename from a rename to b diff --git a/b b/a rename from b rename to a
-
Заголовки отдельных блоков изменений упоминают имя функции, к которой применяется этот блок. См. подробности, о том, как это можно адаптировать для конкретного языка программирования в разделе «Определение пользовательского заголовка блока» в gitattributes[5].
Комбинированный формат списков изменений
Любая команда, выводящая список изменений, принимает параметры -c
или --cc
, которые приводят к созданию списка изменений для слияний в «комбинированном» формате («combined diff»). Это формат по умолчанию при выводе слияний с помощью git-diff[1] или git-show[1]. Также обратите внимание, что для того, чтобы заставить эти команды выводить списки изменений в каком-либо другом формате, можно использовать параметр --diff-merges
с соответствующими аргументами.
Комбинированный формат списков изменений выглядит следующим образом:
diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name);
-
В начале идёт заголовок «git diff», который выглядит следующим образом (при использовании параметра
-c
):diff --combined файл
или следующим (при использовании параметра
--cc
):diff --cc файл
-
Далее следуют одна или несколько строк расширенного заголовка (в данном примере показано слияние с двумя родителями):
index <хеш>,<хеш>..<хеш> mode <режим>,<режим>
..
<режим> new file mode <режим> deleted file mode <режим>,<режим>Строка
mode <режим>,<режим>..<режим>
присутствует только если хотя бы один из <режимов> отличается от остальных. Расширенные заголовки с информацией о найденных перемещениях содержимого (обнаруженных переименованиях и копированиях) предназначены для работы только со списком изменений строго двух <указателей-дерева> и не используются в комбинированном формате. -
Далее следуют две строки заголовка, с указанием исходного и целевого файлов (из-файла/в-файл):
--- a/файл +++ b/файл
Аналогично тому как это делается и в традиционном формате объединённого («unified») списка изменений,
/dev/null
используется для обозначения созданных или удалённых файлов.Однако, если задан параметр
--combined-all-paths
, то вместо этих двух строк заголовка с из-файла/в-файл, вы получите расширенный заголовок из N+1 строки, где N — это количество родителей в коммите слияния:--- a/файл --- a/файл --- a/файл +++ b/файл
Этот расширенный формат может быть полезен, если у вас включено обнаружение переименований и копирований, так как это позволяет увидеть, как назывался файл в разных родителях до слияния.
-
Формат заголовка блока списка изменений был специально модифицирован, чтобы предотвратить случайное применение его с помощью
patch -p1
. Комбинированный формат списков изменений был создан для рецензирования изменений в коммитах слияния и не предназначен для прямого применения в виде патчей. Эти модификации аналогичны тем, что были сделаны в расширенном заголовкеindex
:@@@ <исходный-диапазон> <исходный-диапазон> <результирующий-диапазон> @@@
В заголовке блока для комбинированного формата (количество родителей + 1) символов
@
.
В отличие традиционном объединённого («unified») формата списка изменений, который показывает разницу между двумя файлами А и Б с одной колонкой, в которой содержится или -
(минус — строка есть в А, но удалена в Б), или +
(плюс — нет в А, но добавлена в Б), или " "
(пробел — без изменений), этот формат сравнивает два или более файла файл1, файл2,… с одним файлом Х и показывает, чем Х отличается от каждого из файлов файлN. Так что по одному столбцу для каждого из файлов файлN добавляется в начало строк вывода, чтобы дать понять, как строки в Х отличается от строк в этих файлах.
Символ -
в столбце N означает, что строка была в файле файлN, но ей нет в итоговом документе. Символ +
в столбце N — что строка есть в итоговом документе, но её нет в файле файлN (т.е. с точки зрения этого родителя строка была добавлена).
В примере выше сигнатура функции была изменена в обоих файлах (следовательно, в примере два удаления из каждого из файлов файл1 и файл2, кроме того ++
означает что была добавлена одна строка, которая не появляется ни в файл1, ни в файл1). Также из файла файл1 были взяты восемь других строк, которых не было в файле файл2 (так что они помечены плюсом +
).
Когда этот формат выводится командой git diff-tree -c
, она сравнивает родителей коммита слияния с результатом слияния (т.е. файл1..файлN — это родители). А в выводе команды git diff-files -c
сравниваются файлы в двух родителях неразрешённого слияния с файлом в рабочем каталоге (т.е. файл1 — это индекс 2, или «наша версия», файл2 — это индекс 3, или «их версия»).
Другие форматы списка изменений
Параметр --summary
выводит, какие файлы были созданы, удалены, переименованы и скопированы. А параметром --stat
добавляет к выходу графики diffstat
(1). Эти параметры могут использоваться совместно с другими, такими как -p
, а их вывод предназначен для чтения человеком.
Когда отображаются изменения, связанное с переименованием или копированием, вывод --stat
компактно форматирует пути, объединяя их общие префиксы и суффиксы. Например, если файл arch/i386/Makefile
был перемещён в arch/x86/Makefile
с изменением 4-х строк, это будет отображено как:
arch/{i386 => x86}/Makefile | 4 +--
Параметр --numstat
также выдаёт информацию в виде diffstat
(1), но его вывод больше подходит для машинного чтения. Запись в выводе --numstat
выглядит как:
1 2 README 3 1 arch/{i386 => x86}/Makefile
Где, слева направо идут:
-
rоличество добавленных строк;
-
табуляция;
-
количество удалённых строк;
-
табуляция;
-
путь (возможно с информацией о переименовании/копировании);
-
символ перехода на новую строку.
Если также используется параметр -z
, то вывод форматируется следующим образом:
1 2 README NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
Где:
-
rоличество добавленных строк;
-
табуляция;
-
количество удалённых строк;
-
табуляция;
-
NUL-символ (только для переименований/копирований);
-
путь исходного состояния;
-
NUL-символ (только для переименований/копирований);
-
пути целевого состояния (только для переименований/копирований);
-
NUL-символ.
Дополнительный NUL-символ перед именем пути исходного файла в случае переименования позволяет сценариям, которые читают этот вывод, определить, содержит ли текущая запись только один путь или является записью переименования/копирования (с двумя путями), не прибегая к упреждающему чтению. После чтения количества добавленных и удалённых строк чтение до NUL-символа в обычной ситуации выдаёт путь к файлу, но если он оказывается пустым, то это означает, что в записи есть два пути.
GIT
Является частью пакета git[1]