Spec-Zone.ru › Git

git-show

Название

git-show — показывает различные типы объектов

Краткое описание

git show [<options>] [<object>…​]

Описание

Показывает один или несколько объектов (блобы, деревья, теги и коммиты).

Для коммитов показывает сообщение журнала и текстовый diff. Также представляет коммит слияния в специальном формате, создаваемом командой git diff-tree --cc.

Для тегов показывает сообщение тега и ссылки на объекты.

Для деревьев показывает имена (эквивалентно git ls-tree с --name-only).

Для обычных блобов показывает их содержимое.

Некоторые параметры, поддерживаемые командой git log, можно использовать для управления отображением изменений, вносимых коммитом.

На этой странице руководства описаны только наиболее часто используемые параметры.

Параметры

<object>...

Имена отображаемых объектов (по умолчанию — HEAD). Полный список способов указания имён объектов см. в разделе «УКАЗАНИЕ РЕВИЗИЙ» на странице gitrevisions[7].

--pretty[=<format>]
--format=<format>

Выводит содержимое журналов коммитов в заданном формате, где <format> может принимать одно из значений: oneline, short, medium, full, fuller, reference, email, raw, format:<string> и tformat:<string>. Если <format> не является одним из перечисленных значений и содержит %<placeholder>, он работает так, как если бы был указан --pretty=tformat:<format>.

Дополнительные сведения о каждом формате см. в разделе «КРАСИВЫЕ ФОРМАТЫ». Если часть =<format> опущена, по умолчанию используется medium.

Примечание
формат вывода по умолчанию можно задать в конфигурации репозитория (см. git-config[1]).
--abbrev-commit

Вместо полного 40-байтового шестнадцатеричного имени объекта коммита показывает уникальный префикс имени объекта. Параметр --abbrev=<n> (который также изменяет вывод diff, если он отображается) позволяет указать минимальную длину префикса.

Это должно сделать --pretty=oneline значительно более удобным для чтения на терминалах с шириной 80 столбцов.

--no-abbrev-commit

Показывает полное 40-байтовое шестнадцатеричное имя объекта коммита. Отменяет действие --abbrev-commit — как явно заданного, так и подразумеваемого другими параметрами, такими как --oneline. Также переопределяет переменную log.abbrevCommit.

--oneline

Это сокращённая запись для совместного использования параметров --pretty=oneline --abbrev-commit.

--encoding=<encoding>

В объектах коммитов кодировка, использованная для сообщения журнала, указывается в заголовке кодировки; этот параметр позволяет указать команде перекодировать сообщение журнала коммита в кодировку, предпочитаемую пользователем. Для команд, не относящихся к низкоуровневым, по умолчанию используется UTF-8. Обратите внимание: если объект объявлен закодированным в X, а вывод выполняется в X, объект будет выведен без изменений; это означает, что некорректные последовательности в исходном коммите могут попасть в вывод. Аналогично, если iconv(3) не сможет преобразовать коммит, исходный объект будет выведен без изменений, без сообщений об ошибке.

--expand-tabs=<n>
--expand-tabs
--no-expand-tabs

Перед выводом сообщения заменяет табуляции достаточным количеством пробелов, чтобы заполнить строку до следующей позиции отображения, кратной <n>. --expand-tabs — это сокращение для --expand-tabs=8, а --no-expand-tabs — сокращение для --expand-tabs=0, отключающего раскрытие табуляций.

По умолчанию табуляции раскрываются в форматах вывода, которые добавляют к сообщению журнала отступ в 4 пробела (то есть в medium, используемом по умолчанию, full и fuller).

--notes[=<ref>]

Показывает примечания (см. git-notes[1]), аннотированные к коммиту, при выводе сообщения журнала коммита. Это поведение по умолчанию для команд git log, git show и git whatchanged, если в командной строке не заданы параметры --pretty, --format или --oneline.

По умолчанию показываются примечания из ссылок notes, перечисленных в переменных core.notesRef и notes.displayRef (или соответствующих переопределениях среды). Дополнительные сведения см. в git-config[1].

Если задан необязательный аргумент <ref>, используйте эту ссылку для поиска отображаемых примечаний. Ссылка может указывать полное имя ссылки, если начинается с refs/notes/; если она начинается с notes/, к ней добавляется refs/, а в остальных случаях добавляется refs/notes/, чтобы получить полное имя ссылки.

Можно объединить несколько параметров --notes, чтобы управлять отображаемыми примечаниями. Примеры: «--notes=foo» покажет только примечания из refs/notes/foo; «--notes=foo --notes» покажет и примечания из «refs/notes/foo», и примечания из ссылок notes по умолчанию.

--no-notes

Не показывает примечания. Этот параметр отменяет действие указанного выше параметра --notes, сбрасывая список ссылок notes, из которых показываются примечания. Параметры обрабатываются в том порядке, в котором они указаны в командной строке, поэтому, например, «--notes --notes=foo --no-notes --notes=bar» покажет примечания только из refs/notes/bar.

--show-notes-by-default

Показывает примечания по умолчанию, если не заданы параметры для отображения определённых примечаний.

--show-notes[=<ref>]
--standard-notes
--no-standard-notes

Эти параметры устарели. Вместо них используйте указанные выше параметры --notes/--no-notes.

--show-signature

Проверяет действительность подписанного объекта коммита, передавая подпись команде gpg --verify, и показывает её вывод.

Форматы вывода

Если коммит является слиянием, а формат вывода не равен oneline, email или raw, перед строкой Author: вставляется дополнительная строка. Она начинается с «Merge: », после чего через пробел выводятся хеши родительских коммитов. Обратите внимание: перечисленные коммиты не обязательно будут списком коммитов-родителей direct, если область просмотра истории ограничена: например, если вас интересуют только изменения, относящиеся к определённому каталогу или файлу.

Существует несколько встроенных форматов. Можно определить дополнительные форматы, задав параметру конфигурации pretty.<name> имя другого формата или строку format:, описанную ниже (см. git-config[1]). Ниже приведены сведения о встроенных форматах:

oneline
<hash> <title-line>

Этот формат предназначен для максимально компактного вывода.

short
commit <hash>
Author: <author>
_
    <title-line>_
medium
commit <hash>
Author: <author>
Date:   <author-date>
_
    <title-line>

    <full-commit-message>_
full
commit <hash>
Author: <author>
Commit: <committer>
_
    <title-line>

    <full-commit-message>_
fuller
commit <hash>
Author:     <author>
AuthorDate: <author-date>
Commit:     <committer>
CommitDate: <committer-date>
_
     <title-line>

     <full-commit-message>_
reference
<abbrev-hash> (<title-line>, <short-author-date>)

Этот формат используется для ссылки на другой коммит в сообщении коммита и совпадает с --pretty='format:%C(auto)%h (%s, %ad). По умолчанию дата форматируется с помощью --date=short, если явно не указан другой параметр --date. Как и любой format: с заполнителями формата, его вывод не зависит от других параметров, таких как --decorate и --walk-reflogs.

email
From <hash> <date>
From: <author>
Date: <author-date>
Subject: [PATCH] <title-line>
_
<full-commit-message>_
mboxrd

Как и email, но строки сообщения коммита, начинающиеся с «From » (перед которыми может находиться ноль или более символов «>»), заключаются в кавычки с помощью «>», чтобы их не приняли за начало нового коммита.

raw

Формат raw показывает коммит целиком, в точности в том виде, в каком он хранится в объекте коммита. В частности, хеши всегда отображаются полностью, независимо от того, используются ли --abbrev или --no-abbrev, а сведения о parents показывают настоящие родительские коммиты, не учитывая grafts или упрощение истории. Обратите внимание: этот формат влияет на отображение коммитов, но не на отображение diff, например при использовании git log --raw. Чтобы получить полные имена объектов в необработанном формате diff, используйте --no-abbrev.

format:<format-string>

Формат format:<format-string> позволяет указать, какие именно сведения нужно показать. Он в некоторой степени похож на формат printf, за исключением того, что для перевода строки используется %n, а не \n.

Например, format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" выведет примерно следующее:

The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<

Заполнители:

  • Заполнители, разворачивающиеся в один буквальный символ:

    %n

    перевод строки

    %%

    буквальный символ %

    %x00

    За %x следуют две шестнадцатеричные цифры; вместо них подставляется байт со значением, заданным этими цифрами (далее в документе этот элемент называется «кодом буквального форматирования»).

  • Заполнители, влияющие на форматирование последующих заполнителей:

    %Cred

    переключить цвет на красный

    %Cgreen

    переключить цвет на зелёный

    %Cblue

    переключить цвет на синий

    %Creset

    сбросить цвет

    %C(<spec>)

    спецификация цвета, описанная в подразделе «Значения» раздела «ФАЙЛ КОНФИГУРАЦИИ» на странице git-config[1]. По умолчанию цвета показываются, только если они включены для вывода журнала (параметром color.diff, color.ui или --color и с учётом настроек auto первого из них, если вывод выполняется в терминал). %C(auto,<spec>) принимается как исторический синоним значения по умолчанию (например, %C(auto,red)). Указание %C(always,<spec>) включает цвета, даже если они не включены иным способом (хотя вместо этого можно использовать --color=always, чтобы включить цвета для всего вывода, в том числе для этого формата и любых других элементов, которые git может раскрашивать). Само по себе значение auto (то есть %C(auto)) включает автоматическое раскрашивание следующих заполнителей до очередного переключения цвета.

    %m

    маркер слева (<), справа (>) или границы (-)

    %w([<w>[,<i1>[,<i2>]]])

    переключает перенос строк, как параметр -w команды git-shortlog[1].

    %<(<n>[,(trunc|ltrunc|mtrunc)])

    задаёт для следующего заполнителя ширину не менее N столбцов, при необходимости добавляя пробелы справа. При необходимости текст можно усечь (с многоточием ..) слева (ltrunc) ..ft, посередине (mtrunc) mi..le или в конце (trunc) rig.., если вывод длиннее <n> столбцов. Примечание 1: усечение работает корректно только при <n> >= 2. Примечание 2: пробелы вокруг значений <n> и <m> (см. ниже) необязательны. Примечание 3: эмодзи и другие широкие символы занимают два столбца отображения и могут выходить за границы столбцов. Примечание 4: комбинируемые знаки в разложенных символах могут располагаться неправильно на границах заполнения.

    %<|(<m> )

    задаёт для следующего заполнителя ширину как минимум до столбца <m>, при необходимости добавляя пробелы справа. Используйте отрицательные значения <m> для позиций столбцов, отсчитываемых от правого края окна терминала.

    %>(<n>)
    %>|(<m>)

    аналогичны соответственно %<(<n>) и %<|(<m>), но добавляют пробелы слева

    %>>(<n>)
    %>>|(<m>)

    аналогичны соответственно %>(<n>) и %>|(<m>), за исключением того, что если следующий заполнитель занимает больше места, чем задано, а слева от него есть пробелы, используются эти пробелы

    %><(<n>)
    %><|(<m>)

    аналогичны соответственно %<(<n>) и %<|(<m>), но добавляют пробелы с обеих сторон (то есть выравнивают текст по центру)

  • Подстановочные элементы, которые раскрываются в информацию, извлечённую из коммита:

    %H

    хеш коммита

    %h

    сокращённый хеш коммита

    %T

    хеш дерева

    %t

    сокращённый хеш дерева

    %P

    хеши родительских коммитов

    %p

    сокращённые хеши родительских коммитов

    %an

    имя автора

    %aN

    имя автора (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %ae

    адрес электронной почты автора

    %aE

    адрес электронной почты автора (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %al

    локальная часть адреса электронной почты автора (часть до знака @)

    %aL

    локальная часть адреса автора (см. %al) с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %ad

    дата автора (формат зависит от параметра --date=)

    %aD

    дата автора в формате RFC2822

    %ar

    относительная дата автора

    %at

    дата автора в виде временной метки UNIX

    %ai

    дата автора в формате, подобном ISO 8601

    %aI

    дата автора в строгом формате ISO 8601

    %as

    дата автора в кратком формате (YYYY-MM-DD)

    %ah

    дата автора в удобочитаемом формате (как у параметра --date=human команды git-rev-list[1])

    %cn

    имя коммиттера

    %cN

    имя коммиттера (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %ce

    адрес электронной почты коммиттера

    %cE

    адрес электронной почты коммиттера (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %cl

    локальная часть адреса электронной почты коммиттера (часть до знака @)

    %cL

    локальная часть адреса коммиттера (см. %cl) с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %cd

    дата коммиттера (формат зависит от параметра --date=)

    %cD

    дата коммиттера в формате RFC2822

    %cr

    относительная дата коммиттера

    %ct

    дата коммиттера в виде временной метки UNIX

    %ci

    дата коммиттера в формате, подобном ISO 8601

    %cI

    дата коммиттера в строгом формате ISO 8601

    %cs

    дата коммиттера в кратком формате (YYYY-MM-DD)

    %ch

    дата коммиттера в удобочитаемом формате (как у параметра --date=human команды git-rev-list[1])

    %d

    имена ссылок, как у параметра --decorate команды git-log[1]

    %D

    имена ссылок без обрамления символами " (" и ")".

    %(count)

    номер патча в серии патчей. Используется только в --commit-list-format в format-patch

    %(total)

    общее количество патчей в серии патчей. Используется только в --commit-list-format в format-patch

    %(decorate[:<option>,...])

    имена ссылок с пользовательскими украшениями. За строкой decorate могут следовать двоеточие и ноль или более разделённых запятыми параметров. Значения параметров могут содержать буквальные коды форматирования. Для запятых (%x2C) и закрывающих скобок (%x29) необходимо использовать специальные коды из-за их роли в синтаксисе параметров.

    prefix=<value>

    Отображается перед списком имён ссылок. По умолчанию — " (".

    suffix=<value>

    Отображается после списка имён ссылок. По умолчанию — ")".

    separator=<value>

    Отображается между именами ссылок. По умолчанию — ", ".

    pointer=<value>

    Отображается между HEAD и указывающей на него веткой, если она есть. По умолчанию — " → ".

    tag=<value>

    Отображается перед именами тегов. По умолчанию — "tag: ".

    Например, чтобы вывести украшения без обрамления и аннотаций тегов, разделяя их пробелами:

        %(decorate:prefix=,suffix=,tag=,separator= )
    %(describe[:<option>,...])

    удобочитаемое имя, как у git-describe[1]; пустая строка для коммитов, которым нельзя назначить описание. За строкой describe могут следовать двоеточие и ноль или более разделённых запятыми параметров. Описания могут быть непоследовательными, если теги добавляются или удаляются одновременно.

    tags[=<bool-value>]

    Учитывать не только аннотированные теги, но и облегчённые теги.

    abbrev=<number>

    Вместо использования стандартного количества шестнадцатеричных цифр сокращённого имени объекта (оно зависит от количества объектов в репозитории; по умолчанию — 7) использовать <number> цифр или столько цифр, сколько необходимо для получения уникального имени объекта.

    match=<pattern>

    Учитывать только теги, соответствующие заданному glob(7) <pattern>, без префикса refs/tags/.

    exclude=<pattern>

    Не учитывать теги, соответствующие заданному glob(7) <pattern>, без префикса 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

    сокращённый селектор reflog; то же, что и %gD, но имя ссылки сокращено для удобства чтения (так, refs/heads/master превращается просто в master).

    %gn

    имя пользователя reflog

    %gN

    имя пользователя reflog (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %ge

    адрес электронной почты пользователя reflog

    %gE

    адрес электронной почты пользователя reflog (с учётом .mailmap, см. git-shortlog[1] или git-blame[1])

    %gs

    тема reflog

    %(trailers[:<option>,...])

    отображать завершающие строки тела сообщения согласно интерпретации git-interpret-trailers[1]. За строкой trailers могут следовать двоеточие и ноль или более разделённых запятыми параметров. Если один из параметров указан несколько раз, действует последнее вхождение.

    key=<key>

    показывать только завершающие строки с указанным <key>. Сопоставление выполняется без учёта регистра, завершающее двоеточие необязательно. Если параметр указан несколько раз, показываются строки, соответствующие любому из ключей. Этот параметр автоматически включает параметр only, чтобы скрыть строки, не являющиеся завершающими, в блоке завершающих строк. Если это нежелательно, его можно отключить с помощью only=false. Например, %(trailers:key=Reviewed-by) показывает завершающие строки с ключом Reviewed-by.

    only[=<bool>]

    определяет, включать ли в результат строки блока завершающих строк, которые не являются завершающими.

    separator=<sep>

    задаёт разделитель между завершающими строками. По умолчанию используется символ перевода строки. Строка <sep> может содержать описанные выше буквальные коды форматирования. Чтобы использовать запятую в качестве разделителя, необходимо указать %x2C, иначе она будет интерпретирована как следующий параметр. Например, %(trailers:key=Ticket,separator=%x2C ) показывает все завершающие строки с ключом Ticket, разделённые запятой и пробелом.

    unfold[=<bool>]

    заставляет работать так, как если бы был указан параметр --unfold команды interpret-trailer. Например, %(trailers:only,unfold=true) объединяет и показывает все завершающие строки.

    keyonly[=<bool>]

    показывать только часть завершающей строки с ключом.

    valueonly[=<bool>]

    показывать только часть завершающей строки со значением.

    key_value_separator=<sep>

    задаёт разделитель между ключом и значением каждой завершающей строки. По умолчанию используется ": ". В остальном параметр имеет ту же семантику, что и описанный выше separator=<sep>.

    Примечание
    Некоторые подстановочные элементы могут зависеть от других параметров, переданных механизму обхода ревизий. Например, параметры reflog %g* выведут пустую строку, если мы не обходим записи reflog (например, с помощью git log -g). Для подстановочных элементов %d и %D будет использоваться формат украшений «short», если параметр --decorate ещё не был указан в командной строке.

    Логические параметры принимают необязательное значение [=<bool-value>]. Допускаются все значения, принимаемые параметром --type=bool команды git-config[1], например yes и off. Указание логического параметра без =<value> равносильно указанию его со значением =true.

    Если после % подстановочного элемента добавить + (знак «плюс»), непосредственно перед подстановкой будет вставлен перевод строки, если и только если подстановочный элемент раскрывается в непустую строку.

    Если после % подстановочного элемента добавить - (знак «минус»), все последовательные переводы строк непосредственно перед подстановкой будут удалены, если и только если подстановочный элемент раскрывается в пустую строку.

    Если после % подстановочного элемента добавить пробел, непосредственно перед подстановкой будет вставлен пробел, если и только если подстановочный элемент раскрывается в непустую строку.

tformat:

Формат tformat: работает точно так же, как format:, но использует семантику «завершителя», а не «разделителя». Иными словами, к каждому коммиту добавляется символ завершения сообщения (обычно перевод строки), а не разделитель между записями. Это означает, что последняя запись однострочного формата будет корректно завершена переводом строки, как и в формате «oneline». Например:

$ git log -2 --pretty=format:%h 4da45bef \
  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973 -- NO NEWLINE

$ git log -2 --pretty=tformat:%h 4da45bef \
  | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973

Кроме того, любая нераспознанная строка, содержащая %, интерпретируется так, как если бы перед ней стоял tformat:. Например, следующие два варианта эквивалентны:

$ git log -2 --pretty=tformat:%h 4da45bef
$ git log -2 --pretty=%h 4da45bef

Форматирование различий

Приведённые ниже параметры можно использовать для изменения способа, которым git show создаёт вывод различий.

-p
-u
--patch

Создать патч (см. Создание текста патча с помощью -p).

-s
--no-patch

Подавить весь вывод механизма сравнения. Полезно для таких команд, как git show, которые по умолчанию показывают патч, чтобы заглушить их вывод, или чтобы отменить действие параметров вроде --patch, --stat, указанных ранее в командной строке псевдонима.

-m

Показывать различия для коммитов слияния в формате по умолчанию. Это похоже на --diff-merges=on, за исключением того, что -m не выведет ничего, если также не задан параметр -p.

-c

Создать объединённый вывод различий для коммитов слияния. Сокращение для --diff-merges=combined -p.

--cc

Создать плотный объединённый вывод различий для коммитов слияния. Сокращение для --diff-merges=dense-combined -p.

--dd

Создать различия относительно первого родителя как для коммитов слияния, так и для обычных коммитов. Сокращение для --diff-merges=first-parent -p.

--remerge-diff

Создать вывод remerge-diff для коммитов слияния. Сокращение для --diff-merges=remerge -p.

--no-diff-merges

Синоним для --diff-merges=off.

--diff-merges=<format>

Указать формат различий для коммитов слияния. По умолчанию используется `dense-combined`, если не задействован --first-parent; в этом случае по умолчанию используется first-parent.

Поддерживаются следующие форматы:

off
none

Отключить вывод различий для коммитов слияния. Полезно для переопределения подразумеваемого значения.

on
m

Показывать вывод различий для коммитов слияния в формате по умолчанию. Формат по умолчанию можно изменить с помощью переменной конфигурации log.diffMerges, значение по умолчанию которой — separate.

first-parent
1

Показывать полные различия относительно первого родителя. Это тот же формат, который создаёт --patch для коммитов, не являющихся коммитами слияния.

separate

Показывать полные различия относительно каждого из родителей. Для каждого родителя создаётся отдельная запись журнала и вывод различий.

combined
c

Одновременно показывать различия между каждым из родителей и результатом слияния, а не выводить по очереди попарные различия между родителем и результатом. Кроме того, в списке будут только файлы, изменённые относительно всех родителей.

dense-combined
cc

Ещё сильнее сжать вывод, создаваемый --diff-merges=combined, пропуская неинтересные фрагменты, в которых содержимое родителей имеет только два варианта, а результат слияния без изменений выбирает один из них.

remerge
r

Повторно выполнить слияние для коммитов слияния с двумя родителями, создав временный объект дерева, который может содержать файлы с маркерами конфликтов и тому подобное. Затем показываются различия между этим временным деревом и фактическим коммитом слияния.

Вывод, создаваемый при использовании этого параметра, может измениться; то же относится и к его взаимодействию с другими параметрами (если иное не указано явно).

--combined-all-paths

Включить в объединённые различия (используемые для коммитов слияния) имена файлов из всех родителей. Поэтому этот параметр действует только при использовании --diff-merges=[dense-]combined и, вероятно, полезен только при обнаружении изменений имён файлов (то есть, если включено обнаружение переименований или копирований).

-U<n>
--unified=<n>

Создать вывод различий с <n> строками контекста. По умолчанию число строк контекста равно diff.context или 3, если переменная конфигурации не задана. (-U без <n> молча принимается как синоним -p из-за исторической случайности.) Подразумевает --patch.

--output=<file>

Выводить данные в указанный файл, а не в стандартный вывод.

--output-indicator-new=<char>
--output-indicator-old=<char>
--output-indicator-context=<char>

Указать символ, используемый для обозначения новых, старых строк или строк контекста в созданном патче. Обычно это соответственно +, - и ' '.

--raw

Для каждого коммита показывать сводку изменений в исходном формате различий. См. раздел «ФОРМАТ НЕОБРАБОТАННОГО ВЫВОДА» в git-diff[1]. Это отличается от вывода самого журнала в необработанном формате, который можно получить с помощью --format=raw.

--patch-with-raw

Синоним для -p --raw.

-t

Показывать объекты деревьев в выводе различий.

--indent-heuristic

Включить эвристику, которая сдвигает границы фрагментов различий, чтобы патчи было легче читать. Этот параметр включён по умолчанию.

--no-indent-heuristic

Отключить эвристику отступов.

--minimal

Потратить дополнительное время, чтобы гарантировать создание минимально возможного набора различий.

--patience

Создать различия с помощью алгоритма «patience diff».

--histogram

Создать различия с помощью алгоритма «histogram diff».

--anchored=<text>

Создать различия с помощью алгоритма «anchored diff».

Этот параметр можно указать несколько раз.

Если строка есть и в исходном, и в целевом файле, встречается только один раз и начинается с <text>, этот алгоритм пытается не допустить её появления в выводе в качестве удалённой или добавленной. Внутри он использует алгоритм «patience diff».

--diff-algorithm=(patience|minimal|histogram|myers)

Выбрать алгоритм сравнения. Доступны следующие варианты:

default
myers

Базовый жадный алгоритм сравнения. В настоящее время используется по умолчанию.

minimal

Потратить дополнительное время, чтобы гарантировать создание минимально возможного набора различий.

patience

Использовать алгоритм «patience diff» при создании патчей.

histogram

Этот алгоритм расширяет алгоритм patience, чтобы «поддерживать общие элементы с низкой частотой встречаемости».

Например, если для переменной diff.algorithm задано нестандартное значение и нужно использовать значение по умолчанию, следует воспользоваться параметром --diff-algorithm=default.

--stat[=<width>[,<name-width>[,<count>]]]

Создать diffstat. По умолчанию для части с именем файла используется столько места, сколько необходимо, а остальное отводится под графическую часть. Максимальная ширина по умолчанию равна ширине терминала или 80 столбцам, если вывод не подключён к терминалу; её можно переопределить с помощью <width>. Ширину части с именем файла можно ограничить, указав после запятой другую ширину <name-width> или задав diff.statNameWidth=<name-width>. Ширину графической части можно ограничить с помощью --stat-graph-width=<graph-width> или задав diff.statGraphWidth=<graph-width>. Использование --stat или --stat-graph-width влияет на все команды, создающие статистический график, тогда как настройка diff.statNameWidth или diff.statGraphWidth не влияет на git format-patch. Указав третий параметр <count>, можно ограничить вывод первыми <count> строками; если их больше, далее будет выведено ....

Эти параметры также можно задавать по отдельности с помощью --stat-width=<width>, --stat-name-width=<name-width> и --stat-count=<count>.

--compact-summary

Вывести краткую сводку расширенной информации заголовка, например о создании или удалении файлов («new» или «gone», а для символической ссылки — необязательно +l) и изменениях режима (+x или -x соответственно при добавлении или удалении бита выполнения), в diffstat. Эта информация помещается между частью с именем файла и графической частью. Подразумевает --stat.

--numstat

Похоже на --stat, но показывает число добавленных и удалённых строк в десятичной записи, а также полный путь без сокращений, что удобнее для машинной обработки. Для двоичных файлов вместо сообщения 0 0 выводятся два значения -.

--shortstat

Вывести только последнюю строку формата --stat, содержащую общее число изменённых файлов, а также число добавленных и удалённых строк.

-X [<param>,...]
--dirstat[=<param>,...]

Вывести распределение относительного объёма изменений для каждого подкаталога. Поведение --dirstat можно настроить, передав ему список параметров, разделённых запятыми. Значения по умолчанию задаются переменной конфигурации diff.dirstat (см. git-config[1]). Доступны следующие параметры:

changes

Вычислять значения dirstat, подсчитывая строки, удалённые из источника или добавленные в целевой файл. При этом не учитывается объём простого перемещения кода внутри файла. Иными словами, перестановка строк в файле учитывается не так, как прочие изменения. Это поведение используется по умолчанию, если параметр не задан.

lines

Вычислять значения dirstat с помощью обычного построчного анализа различий, суммируя число удалённых и добавленных строк. (Для двоичных файлов вместо этого подсчитываются блоки по 64 байта, поскольку в двоичных файлах нет естественного понятия строк.) Это поведение --dirstat требует больше вычислений, чем поведение changes, но оно учитывает переставленные строки внутри файла так же, как прочие изменения. Полученный вывод согласуется с результатами других параметров --*stat.

files

Вычислять значения dirstat, подсчитывая число изменённых файлов. При анализе dirstat каждый изменённый файл имеет одинаковый вес. Это поведение --dirstat требует меньше всего вычислений, поскольку содержимое файлов проверять не нужно.

cumulative

Учитывать изменения в дочернем каталоге также и для родительского каталога. Обратите внимание, что при использовании cumulative сумма отображаемых процентов может превышать 100%. Поведение по умолчанию (без накопления) можно задать параметром noncumulative.

<limit>

Целочисленный параметр задаёт пороговый процент (по умолчанию 3%). Каталоги, на долю которых приходится меньше этого процента изменений, не отображаются.

Пример: следующая команда подсчитает изменённые файлы, исключив каталоги, на которые приходится менее 10% от общего числа изменённых файлов, и добавит число изменений в дочерних каталогах к числу изменений в родительских каталогах: --dirstat=files,10,cumulative.

--cumulative

Синоним для --dirstat=cumulative.

--dirstat-by-file[=<param>,...]

Синоним для --dirstat=files,<param>,....

--summary

Вывести краткую сводку расширенной информации заголовка, например о создании, переименовании и изменении режима.

--patch-with-stat

Синоним для -p --stat.

-z

Разделять коммиты символами NUL, а не символами новой строки.

Кроме того, если задан параметр --raw или --numstat, не изменять имена путей и использовать символы NUL в качестве разделителей полей вывода.

Без этого параметра имена путей с «необычными» символами заключаются в кавычки, как описано для переменной конфигурации core.quotePath (см. git-config[1]).

--name-only

Показывать только имена изменённых файлов в результирующем дереве. Имена файлов часто кодируются в UTF-8. Дополнительные сведения см. в обсуждении кодировки на странице руководства git-log[1].

--name-status

Показывать только имена и состояния изменённых файлов. Значение букв, обозначающих состояния, см. в описании параметра --diff-filter. Как и при использовании --name-only, имена файлов часто кодируются в UTF-8.

--submodule[=<format>]

Указать, как показывать различия в подмодулях. При указании --submodule=short используется формат short. В этом формате показываются только имена коммитов в начале и конце диапазона. Если задан --submodule или --submodule=log, используется формат log. В этом формате перечисляются коммиты диапазона, как это делает команда summary из git-submodule[1]. Если задан --submodule=diff, используется формат diff. В этом формате выводятся встроенные различия изменений содержимого подмодуля между коммитами диапазона. По умолчанию используется diff.submodule или формат short, если параметр конфигурации не задан.

--color[=<when>]

Показывать цветные различия. --color (то есть без =<when>) эквивалентен --color=always. Значением <when> может быть always, never или auto.

--no-color

Отключить цветной вывод различий. Эквивалентен --color=never.

--color-moved[=<mode>]

Перемещённые строки кода выделяются другим цветом. Если параметр не указан, значение <mode> по умолчанию равно 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=<mode>,...

Этот параметр задаёт, как игнорируются пробельные символы при обнаружении перемещений для --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[=<mode>]

По умолчанию слова разделяются пробельными символами; см. --word-diff-regex ниже. По умолчанию <mode> имеет значение plain; допустимы следующие значения:

color

Выделять изменённые слова только цветом. Подразумевает --color.

plain

Показывать слова в виде [-removed-] и {added}. Не предпринимаются попытки экранировать разделители, если они встречаются во входных данных, поэтому вывод может быть неоднозначным.

porcelain

Использовать специальный построчный формат, предназначенный для обработки скриптами. Последовательности добавленных/удалённых/неизменённых строк выводятся в обычном формате унифицированного diff: строка начинается с символа +/-/` ` и продолжается до конца строки. Символы новой строки во входных данных обозначаются тильдой ~ в отдельной строке.

none

Снова отключить сравнение слов.

Обратите внимание: несмотря на название первого режима, во всех режимах изменённые части выделяются цветом, если включено цветовое оформление.

Параметр --word-diff работает так: берётся тот же построчный diff, который был бы создан без этого параметра, и для каждого фрагмента вычисляются изменения пословно. В результате diff может оказаться объёмнее, чем при использовании специального инструмента для сравнения слов. Если в будущем Git получит другую реализацию, вывод может измениться. Обратите внимание, что это похоже на параметр --diff-algorithm, который также может изменить вывод.

--word-diff-regex=<regex>

Использовать <regex> для определения слова вместо последовательностей непробельных символов. Также подразумевает --word-diff, если этот параметр ещё не был включён.

Каждое неперекрывающееся совпадение с <regex> считается словом. Всё, что находится между этими совпадениями, считается пробельными символами и игнорируется (!) при поиске различий. Возможно, вам потребуется добавить к регулярному выражению |[^[:space:]], чтобы оно соответствовало всем непробельным символам. Совпадение, содержащее символ новой строки, без предупреждения (!) обрезается на этом символе.

Например, --word-diff-regex=. будет считать каждый символ словом и, соответственно, показывать различия посимвольно.

Регулярное выражение также можно задать с помощью драйвера diff или параметра конфигурации; см. gitattributes[5] или git-config[1]. Явно заданное значение переопределяет настройки драйвера diff или конфигурации. Драйверы diff переопределяют настройки конфигурации.

--color-words[=<regex>]

Эквивалентно --word-diff=color и (если указано регулярное выражение) --word-diff-regex=<regex>.

--no-renames

Отключить обнаружение переименований, даже если в файле конфигурации оно включено по умолчанию.

--rename-empty
--no-rename-empty

Определяет, следует ли использовать пустые блобы в качестве источника переименования.

--check

Выводить предупреждение, если изменения добавляют маркеры конфликтов или ошибки пробельных символов. Критерии ошибок пробельных символов задаются конфигурацией core.whitespace. По умолчанию к таким ошибкам относятся завершающие пробельные символы (включая строки, состоящие только из пробельных символов), а также пробел, за которым сразу следует символ табуляции во вводном отступе строки. Если обнаружены проблемы, команда завершается с ненулевым кодом возврата. Несовместимо с --exit-code.

--ws-error-highlight=<kind>

Выделять ошибки пробельных символов в строках diff context, old или new. Несколько значений разделяются запятыми, none сбрасывает предыдущие значения, default сбрасывает список до new, а all является сокращением для old,new,context. Если этот параметр не задан и переменная конфигурации diff.wsErrorHighlight не установлена, ошибки пробельных символов выделяются только в строках new. Ошибки пробельных символов окрашиваются цветом color.diff.whitespace.

--full-index

При создании вывода в формате patch вместо первых нескольких символов показывать полные имена объектов-блобов до и после изменения в строке "index".

--binary

В дополнение к --full-index выводить бинарный diff, который можно применить с помощью git-apply. Подразумевает --patch.

--abbrev[=<n>]

Вместо полного 40-байтового шестнадцатеричного имени объекта в выводе формата diff-raw и строках заголовка diff-tree показывать кратчайший префикс длиной не менее <n> шестнадцатеричных цифр, однозначно идентифицирующий объект. В формате вывода diff-patch приоритет имеет --full-index, то есть если указан --full-index, будут показаны полные имена блобов независимо от --abbrev. Число цифр, отличное от значения по умолчанию, можно указать с помощью --abbrev=<n>.

-B[<n>][/<m>]
--break-rewrites[=[<n>][/<m>]]

Разбивать полные переписывания на пары удаления и создания. Это служит двум целям:

Параметр влияет на то, как изменение, представляющее собой полное переписывание файла, отображается: не как последовательность вперемешку идущих удалений и добавлений с несколькими текстуально совпадающими строками контекста, а как единичное удаление всего старого содержимого с последующим единичным добавлением всего нового. Число <m> задаёт этот аспект параметра -B (по умолчанию 60%). -B/70% указывает, что в результате должно остаться менее 30% исходного содержимого, чтобы Git счёл изменение полным переписыванием (в противном случае результирующий patch будет представлять собой последовательность вперемешку идущих удалений и добавлений со строками контекста).

При использовании вместе с -M полностью переписанный файл также считается источником переименования (обычно -M рассматривает в качестве источника переименования только исчезнувший файл), а число <n> задаёт этот аспект параметра -B (по умолчанию 50%). -B20% указывает, что изменение с добавлениями и удалениями, составляющими 20% или более от размера файла, может рассматриваться как возможный источник переименования в другой файл.

-M[<n>]
--find-renames[=<n>]

При создании diff обнаруживать и сообщать о переименованиях для каждого коммита. О том, как отслеживать файлы при переходах между переименованиями во время обхода истории, см. --follow. Если указано <n>, оно задаёт порог индекса сходства (то есть объём добавлений/удалений относительно размера файла). Например, -M90% означает, что Git должен считать пару удаления/добавления переименованием, если изменилось менее 10% файла. Если знак % отсутствует, число считается дробью с десятичной точкой перед ним. То есть -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

Не показывать исходное содержимое удалённых файлов, то есть выводить только заголовок, но не diff между исходным содержимым и /dev/null. Полученный patch не предназначен для применения с помощью patch или git apply; этот параметр предназначен исключительно для тех, кто хочет сосредоточиться на проверке текста после изменения. Кроме того, в выводе заведомо недостаточно информации для применения такого patch в обратном направлении, даже вручную, отсюда и название параметра.

При использовании вместе с -B не показывать также исходное содержимое в части удаления пары удаления/создания.

-l<num>

Параметры -M и -C включают некоторые предварительные шаги, позволяющие с малыми затратами обнаружить некоторые переименования/копирования, после которых следует исчерпывающая проверка всех оставшихся несопоставленных назначений со всеми соответствующими источниками. (Для переименований учитываются только оставшиеся несопоставленные источники; для копирований учитываются все исходные источники.) Для N источников и назначений эта исчерпывающая проверка имеет сложность O(N^2). Этот параметр предотвращает выполнение исчерпывающей части обнаружения переименований/копирований, если количество задействованных исходных/целевых файлов превышает указанное число. По умолчанию используется diff.renameLimit. Обратите внимание: значение 0 считается неограниченным.

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]

Выбирать только добавленные (A), скопированные (C), удалённые (D), изменённые (M), переименованные (R) файлы, файлы с изменившимся типом (то есть обычные файлы, символические ссылки, подмодули и т. д.) (T), неслитые файлы (U), файлы с неизвестным статусом (X) или файлы с нарушенным соответствием (B). Можно использовать любую комбинацию символов фильтра (включая пустую). Если в комбинацию добавлен * (все или ничего), выбираются все пути, если в сравнении есть хотя бы один файл, соответствующий остальным критериям; если ни один файл не соответствует остальным критериям, ничего не выбирается.

Кроме того, эти заглавные буквы можно записывать в нижнем регистре, чтобы исключить соответствующие файлы. Например, --diff-filter=ad исключает добавленные и удалённые пути.

Обратите внимание: не все diff могут содержать файлы всех типов. Например, записи о копированиях и переименованиях не могут появиться, если обнаружение этих типов отключено.

-S<string>

Искать различия, изменяющие количество вхождений указанной <string> (то есть добавления/удаления) в файле. Предназначено для использования в скриптах.

Это полезно, когда вы ищете точный блок кода (например, структуру) и хотите узнать историю этого блока с момента его появления: используйте эту возможность итеративно, передавая интересующий блок из исходного содержимого обратно в -S, и продолжайте, пока не найдёте самую первую версию блока.

Поиск выполняется и в бинарных файлах.

-G<regex>

Искать различия, в тексте patch которых есть добавленные/удалённые строки, соответствующие <regex>.

Чтобы показать разницу между -S<regex> --pickaxe-regex и -G<regex>, рассмотрим коммит со следующим diff в одном и том же файле:

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);

Команда git log -G"frotz\(nitfol" покажет этот коммит, а git log -S"frotz\(nitfol" --pickaxe-regex — нет (поскольку количество вхождений этой строки не изменилось).

Если не указан --text, patch бинарных файлов без фильтра textconv будут игнорироваться.

Дополнительные сведения см. в разделе pickaxe документации gitdiffcore[7].

--find-object=<object-id>

Искать различия, изменяющие количество вхождений указанного объекта. Аналогично -S, но аргумент отличается тем, что ищется не конкретная строка, а идентификатор конкретного объекта.

Объектом может быть блоб или коммит подмодуля. Этот параметр подразумевает параметр -t в git-log, чтобы также находить деревья.

--pickaxe-all

Когда -S или -G находит изменение, показывать все изменения в этом наборе изменений, а не только файлы, содержащие изменение в <string>.

--pickaxe-regex

Обрабатывать <string>, переданное параметру -S, как расширенное регулярное выражение POSIX для поиска совпадений.

-O<orderfile>

Задавать порядок отображения файлов в выводе. Этот параметр переопределяет переменную конфигурации diff.orderFile (см. git-config[1]). Чтобы отменить действие diff.orderFile, используйте -O/dev/null.

Порядок вывода определяется порядком шаблонов glob в <orderfile>. Сначала выводятся все файлы, имена путей которых соответствуют первому шаблону, затем — все файлы, имена путей которых соответствуют второму шаблону (но не первому), и так далее. Последними выводятся все файлы, имена путей которых не соответствуют ни одному шаблону, как если бы в конце файла находился неявный шаблон, соответствующий всему. Если несколько имён путей имеют одинаковый ранг (соответствуют одному и тому же шаблону, но не более ранним шаблонам), их относительный порядок вывода будет обычным.

Файл <orderfile> обрабатывается следующим образом:

  • Пустые строки игнорируются, поэтому их можно использовать для разделения блоков текста и повышения удобочитаемости.

  • Строки, начинающиеся с решётки ("#"), игнорируются, поэтому их можно использовать для комментариев. Если шаблон начинается с решётки, добавьте перед ней обратную косую черту ("\").

  • Каждая другая строка содержит один шаблон.

Шаблоны имеют тот же синтаксис и семантику, что и шаблоны для fnmatch(3) без флага FNM_PATHNAME, за исключением того, что имя пути также соответствует шаблону, если после удаления любого количества завершающих компонентов пути оно соответствует этому шаблону. Например, шаблон "foo*bar" соответствует "fooasdfbar" и "foo/bar/baz/asdf", но не "foobarx".

--skip-to=<file>
--rotate-to=<file>

Исключать из вывода файлы, расположенные перед указанным <file> (то есть skip to), или перемещать их в конец вывода (то есть rotate to). Эти параметры были созданы главным образом для использования командой git difftool и вряд ли будут полезны в других случаях.

-R

Поменять местами два входных источника, то есть показать различия между индексом или файлом на диске и содержимым дерева.

--relative[=<path>]
--no-relative

Если команда запущена из подкаталога проекта, с помощью этого параметра можно исключить изменения за пределами каталога и показывать имена путей относительно него. Если команда запущена не из подкаталога (например, в «голом» репозитории), можно указать подкаталог, относительно которого нужно сформировать вывод, передав <path> в качестве аргумента. --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<regex>
--ignore-matching-lines=<regex>

Игнорировать изменения, если все строки соответствуют <regex>. Этот параметр можно указывать несколько раз.

--inter-hunk-context=<number>

Показывать контекст между фрагментами diff длиной до указанного <number> строк, объединяя тем самым близко расположенные фрагменты. По умолчанию используется значение diff.interHunkContext или 0, если параметр конфигурации не задан.

-W
--function-context

Показывать всю функцию в качестве контекстных строк для каждого изменения. Имена функций определяются так же, как команда git diff формирует заголовки фрагментов patch (см. раздел «Определение пользовательского заголовка фрагмента» в gitattributes[5]).

--ext-diff

Разрешить запуск внешней программы для сравнения diff. Если вы настроили внешний драйвер diff с помощью gitattributes[5], этот параметр нужно использовать с git-log[1] и родственными командами.

--no-ext-diff

Запретить использование внешних драйверов diff.

--textconv
--no-textconv

Разрешить (или запретить) запуск внешних фильтров преобразования текста при сравнении бинарных файлов. Подробности см. в gitattributes[5]. Поскольку фильтры textconv обычно выполняют преобразование только в одну сторону, полученный diff подходит для просмотра человеком, но не может быть применён. По этой причине фильтры textconv по умолчанию включены только для git-diff[1] и git-log[1], но не для git-format-patch[1] или низкоуровневых команд diff.

--ignore-submodules[=(none|untracked|dirty|all)]

Игнорировать изменения подмодулей при создании diff. По умолчанию используется all. При использовании none подмодуль считается изменённым, если он содержит неотслеживаемые или изменённые файлы либо его HEAD отличается от коммита, записанного в суперпроекте. Этот параметр можно использовать, чтобы переопределить любые настройки параметра ignore в git-config[1] или gitmodules[5]. При использовании untracked подмодули не считаются изменёнными, если содержат только неотслеживаемые данные (но проверяются на наличие изменённых данных). При использовании dirty игнорируются все изменения рабочего дерева подмодулей; отображаются только изменения коммитов, сохранённых в суперпроекте (такое поведение использовалось до версии 1.7.0). При использовании all скрываются все изменения подмодулей.

--src-prefix=<prefix>

Показывать указанный префикс источника <prefix> вместо "a/".

--dst-prefix=<prefix>

Показывать указанный префикс назначения <prefix> вместо "b/".

--no-prefix

Не показывать префиксы источника и назначения.

--default-prefix

Использовать стандартные префиксы источника и назначения ("a/" и "b/"). Этот параметр переопределяет такие переменные конфигурации, как diff.noprefix, diff.srcPrefix, diff.dstPrefix и diff.mnemonicPrefix (см. git-config[1]).

--line-prefix=<prefix>

Добавлять дополнительный <prefix> в начало каждой строки вывода.

--ita-invisible-in-index

По умолчанию записи, добавленные командой git add -N, отображаются как существующий пустой файл в git diff и как новый файл в git diff --cached. Этот параметр заставляет отображать запись как новый файл в git diff и как отсутствующую в git diff --cached. Этот параметр можно отменить с помощью --ita-visible-in-index. Оба параметра являются экспериментальными и могут быть удалены в будущем.

--max-depth=<depth>

Для каждого указанного в командной строке pathspec спускаться не более чем на <depth> уровней каталогов. Значение -1 означает отсутствие ограничения. Нельзя использовать вместе с шаблонами в pathspec. Для дерева, содержащего foo/bar/baz, в следующем списке показаны результаты для каждого набора параметров:

  • --max-depth=0 -- foo: foo

  • --max-depth=1 -- foo: foo/bar

  • --max-depth=1 -- foo/bar: foo/bar/baz

  • --max-depth=1 -- foo foo/bar: foo/bar/baz

  • --max-depth=2 -- foo: foo/bar/baz

Если pathspec не указан, глубина измеряется так, как если бы были заданы все элементы верхнего уровня. Обратите внимание, что это отличается от измерения от корня: --max-depth=0 всё равно вернёт foo. Это позволяет ограничить глубину, запрашивая при этом подмножество элементов верхнего уровня.

Обратите внимание, что этот параметр поддерживается только для diff между объектами дерева, но не для сравнения с индексом или рабочим деревом.

Более подробное описание этих распространённых параметров см. также в gitdiffcore[7].

Создание текста патча с помощью -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 немного отличается от традиционного формата diff:

  1. Перед ним располагается заголовок "git diff" следующего вида:

    diff --git a/file1 b/file2

    Имена файлов a/ и b/ совпадают, если не выполняется переименование или копирование. В частности, даже при создании или удалении файла вместо имён файлов a/ или b/ используется not /dev/null.

    При переименовании или копировании file1 и file2 указывают соответственно имя исходного файла и имя файла, полученного в результате переименования или копирования.

  2. За ним следуют одна или несколько строк расширенного заголовка:

    old mode <mode>
    new mode <mode>
    deleted file mode <mode>
    new file mode <mode>
    copy from <path>
    copy to <path>
    rename from <path>
    rename to <path>
    similarity index <number>
    dissimilarity index <number>
    index <hash>..<hash> <mode>

    Режимы файлов <mode> выводятся в виде шестизначных восьмеричных чисел, содержащих тип файла и биты прав доступа.

    Пути в расширенных заголовках не содержат префиксов a/ и b/.

    Индекс сходства — это процент неизменённых строк, а индекс различия — процент изменённых строк. Значение округляется вниз до целого числа, за которым следует знак процента. Поэтому индекс сходства 100% зарезервирован для двух одинаковых файлов, а различие 100% означает, что ни одна строка из старого файла не попала в новый.

    Строка индекса содержит имена объектов blob до и после изменения. Значение <mode> указывается, если режим файла не меняется; в противном случае отдельные строки показывают старый и новый режимы.

  3. Имена путей с «необычными» символами заключаются в кавычки, как описано для переменной конфигурации core.quotePath (см. git-config[1]).

  4. Все файлы file1 в выводе относятся к состоянию до коммита, а все файлы file2 — к состоянию после коммита. Нельзя последовательно применять каждое изменение к каждому файлу. Например, этот патч поменяет местами 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
  5. В заголовках блоков diff указывается имя функции, к которой относится блок. Подробные сведения о настройке для конкретных языков см. в разделе «Определение пользовательского заголовка блока» в gitattributes[5].

Формат объединённого diff

Любая команда, создающая diff, может принимать параметр -c или --cc, чтобы выводить combined diff при отображении слияния. Это формат по умолчанию при отображении слияний с помощью git-diff[1] или git-show[1]. Также обратите внимание, что любой из этих команд можно передать подходящий параметр --diff-merges, чтобы принудительно создать diff в определённом формате.

Формат «объединённого diff» выглядит так:

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);
  1. Перед ним располагается заголовок "git diff" следующего вида (при использовании параметра -c):

    diff --combined file

    или следующего вида (при использовании параметра --cc):

    diff --cc file
  2. За ним следуют одна или несколько строк расширенного заголовка (в этом примере показано слияние с двумя родителями):

    index <hash>,<hash>..<hash>
    mode <mode>,<mode>..<mode>
    new file mode <mode>
    deleted file mode <mode>,<mode>

    Строка mode <mode>,<mode>..<mode> появляется, только если хотя бы одно значение <mode> отличается от остальных. Расширенные заголовки со сведениями об обнаруженном перемещении содержимого (переименовании и обнаружении копирования) предназначены для работы с diff двух <tree-ish> и не используются в формате объединённого diff.

  3. За ним следует двухстрочный заголовок файлов-источников и файлов-назначений:

    --- a/file
    +++ b/file

    Как и в двухстрочном заголовке традиционного формата diff unified, /dev/null используется для обозначения созданных или удалённых файлов.

    Однако если указан параметр --combined-all-paths, вместо двухстрочного заголовка файлов-источников и файлов-назначений выводится заголовок из N+1 строк, где N — число родителей коммита слияния:

    --- a/file
    --- a/file
    --- a/file
    +++ b/file

    Этот расширенный формат может быть полезен при активном обнаружении переименований или копирований, позволяя увидеть исходное имя файла у разных родителей.

  4. Формат заголовка блока изменён, чтобы случайно не передать его команде patch -p1. Формат объединённого diff создан для просмотра изменений коммита слияния и не предназначен для применения. Это изменение аналогично изменению расширенного заголовка index:

    @@@ <from-file-range> <from-file-range> <to-file-range> @@@

    В заголовке блока объединённого diff содержится (число родителей + 1) символов @.

В отличие от традиционного формата diff unified, который показывает два файла A и B в одном столбце с префиксами - (минус — строка есть в A, но удалена из B), + (плюс — строки нет в A, но она добавлена в B) или " " (пробел — строка не изменилась), этот формат сравнивает два или более файлов file1, file2,…​ с одним файлом X и показывает, чем X отличается от каждого fileN. В вывод добавляется по одному столбцу для каждого fileN, чтобы отметить, чем строка X отличается от него.

Символ - в столбце N означает, что строка есть в fileN, но отсутствует в результате. Символ + в столбце N означает, что строка есть в результате, но отсутствует в fileN (иначе говоря, с точки зрения этого родителя строка была добавлена).

В приведённом выше примере сигнатура функции изменена в обоих файлах (отсюда два удаления - из file1 и file2, а также ++, обозначающий одну добавленную строку, которой нет ни в file1, ни в file2). Кроме того, восемь других строк совпадают с file1, но отсутствуют в file2 (поэтому перед ними стоит префикс +).

При выводе командой git diff-tree -c сравниваются родители коммита слияния с результатом слияния (то есть file1..fileN — это родители). При выводе командой git diff-files -c сравниваются два родительских файла с неразрешённым слиянием с файлом рабочего дерева (то есть file1 — это этап 2, также называемый «наша версия», а file2 — этап 3, также называемый «их версия»).

Примеры

git show v1.0.0

Показывает тег v1.0.0 вместе с объектом, на который указывает тег.

git show v1.0.0^{tree}

Показывает дерево, на которое указывает тег v1.0.0.

git show -s --format=%s v1.0.0^{commit}

Показывает тему коммита, на который указывает тег v1.0.0.

git show next~10:Documentation/README

Показывает содержимое файла Documentation/README в том виде, в каком оно было в десятом коммите от конца ветки next.

git show master:Makefile master:t/Makefile

Объединяет содержимое указанных Makefile из вершины ветки master.

Обсуждение

В некоторой степени Git не зависит от кодировки символов.

  • Содержимое объектов blob — это неинтерпретируемые последовательности байтов. На базовом уровне преобразование кодировки не выполняется.

  • Имена путей кодируются в UTF-8 в нормализованной форме C. Это относится к объектам дерева, файлу индекса, именам ссылок, а также к именам путей в аргументах командной строки, переменных окружения и файлах конфигурации (.git/config (см. git-config[1]), gitignore[5], gitattributes[5] и gitmodules[5]).

    Обратите внимание, что на базовом уровне Git рассматривает имена путей просто как последовательности ненулевых байтов; преобразование кодировки имён путей не выполняется (за исключением Mac и Windows). Поэтому использование имён путей с не-ASCII символами обычно работает даже на платформах и в файловых системах, использующих устаревшие расширенные кодировки ASCII. Однако репозитории, созданные в таких системах, не будут корректно работать в системах на основе UTF-8 (например, Linux, Mac, Windows), и наоборот. Кроме того, многие инструменты на основе Git предполагают, что имена путей представлены в UTF-8, и не смогут правильно отображать другие кодировки.

  • Сообщения в журналах коммитов обычно кодируются в UTF-8, но также поддерживаются другие расширенные кодировки ASCII. К ним относятся ISO-8859-x, CP125x и многие другие, но not UTF-16/32, EBCDIC и многобайтовые кодировки CJK (GBK, Shift-JIS, Big5, EUC-x, CP9xx и т. д.).

Хотя мы рекомендуем кодировать сообщения в журналах коммитов в UTF-8, и базовая система, и Git Porcelain устроены так, чтобы не навязывать UTF-8 проектам. Если всем участникам проекта удобнее использовать устаревшие кодировки, Git этого не запрещает. Однако следует учитывать несколько моментов.

  1. git commit и git commit-tree выдают предупреждение, если переданное им сообщение в журнале коммитов не похоже на корректную строку UTF-8, кроме случаев, когда вы явно указали, что в проекте используется устаревшая кодировка. Для этого нужно задать i18n.commitEncoding в файле .git/config, например:

    [i18n]
            commitEncoding = ISO-8859-1

    В объектах коммитов, созданных с указанной выше настройкой, значение i18n.commitEncoding записывается в заголовок encoding. Это помогает другим пользователям, которые будут просматривать эти объекты позже. Отсутствие такого заголовка означает, что сообщение в журнале коммитов закодировано в UTF-8.

  2. git log, git show, git blame и другие команды считывают заголовок encoding объекта коммита и пытаются перекодировать сообщение журнала в UTF-8, если не указано иное. Желаемую кодировку вывода можно задать с помощью i18n.logOutputEncoding в файле .git/config, например:

    [i18n]
            logOutputEncoding = ISO-8859-1

    Если эта переменная конфигурации не задана, используется значение i18n.commitEncoding.

Обратите внимание, что мы намеренно не стали перекодировать сообщения в журналах коммитов при создании коммита, чтобы принудительно использовать UTF-8 на уровне объекта коммита: перекодирование в UTF-8 не обязательно является обратимой операцией.

show

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-show

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API