Программирование PC Руководство по команде git log Tue, April 16 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Руководство по команде git log Печать
Добавил(а) microsin   

Здесь приведен перевод справки git log (вывод команды git log --help).

GIT-LOG(1)

NAME

   git-log - покажет логи фиксаций (commit logs)

SYNOPSIS

   git log [< options>] [< revision range>] [[--] < path>...]

ОПИСАНИЕ

   Команда показывает логи фиксаций.

   Будут перечислены фиксации, доступные по родительским ссылкам из заданной фиксации (фиксаций), но за исключением фиксаций, доступных из тех, которые заданы с символом ^ перед ними. По умолчанию список фиксаций предоставляются в обратном хронологическом порядке (т. е. сначала самые свежие фиксации).

   Вы можете рассматривать это как заданную операцию. Составляется список фиксаций, доступных из любой фиксации, указанной в командной строке, и затем из этого списка вычитаются фиксации, которые доступны и любой из тех, перед которым стоит ^. Те фиксации, что останутся после этого - будут выведены в списке как результат команды. Различные другие параметры опций (options) и путей (path) могут быть использованы для дополнительного ограничения результирующего вывода.

   Таким образом, следующая команда:

$ git log foo bar ^baz

... означает "список всех фиксаций, которые доступны из foo или bar, но не из baz".

   Может использоваться специальная нотация "< commit1>..< commit2>" как сокращение для "^< commit1> < commit2>". Например, следующие 2 варианта команды взаимозаменяемы:

$ git log origin..HEAD
$ git log HEAD ^origin

   Другая специальная нотация это "< commit1>...< commit2>", которая полезна для слияний (merge). Результирующий список фиксаций - симметричная разница между двумя операндами. Следующие две команды эквивалентны:

$ git log A B --not $(git merge-base --all A B)
$ git log A...B

   Команда принимает опции, применимые для команды git-rev-list(1), чтобы управлять тем, что и как показывать, и опции, применимые к команде git-diff(1) для управления отображением изменений, вносимых каждой фиксацией.

ОПЦИИ

   --follow

      Продолжить список истории файла после переименования (работает только для одного файла).

   --no-decorate, --decorate[=short|full|auto|no]

      Распечатает имена ссылок (ref names) всех отображаемых фиксаций. Если указан short, то не будут выведены префиксы refs/heads/, refs/tags/ и refs/remotes/. Если указано full, то будет напечатано полное имя ссылки (включая префикс). Если задано значение auto, то при выводе на терминал имена ссылок отображаются как короткие, в противном случае имена ссылок не отображаются. Опция --decorate является сокращением для --decorate=short. По умолчанию используется значение конфигурации log.decorate (если это сконфигурировано), иначе по умолчанию используется auto.

    --decorate-refs=< pattern>, --decorate-refs-exclude=< pattern>

      Если не указано --decorate-refs, то все работает, как будто включены все ссылки. Для каждого кандидата не используйте это для декорирования, если это соответствует любому шаблону, указанному через --decorate-refs-exclude, или если это не соответствует любому шаблону, указанному через --decorate-refs. Опция конфигурации The log.excludeDecoration позволяет исключать ссылки из декораций, однако явный шаблон --decorate-refs отменит совпадение в log.excludeDecoration.

   --source

      Напечатает имя ссылки (ref name), указанное в командной строке, с помощью которой была достигнута каждая фиксация.

   --[no-]mailmap, --[no-]use-mailmap

      Использование файла mailmap для отображения имен author и committer и email-адресов в канонические реальные имена и email-адреса. См. git-shortlog(1).

   --full-diff

      Без этого флага git log -p < path>... покажет фиксации, которые касаются указанного пути path, и отличия (diffs) по тому же самому казанному пути. При этом полный diff показывается для фиксаций, которые касаются указанных путей; это означает, что "< path>..." ограничивается только фиксациями, и не ограничивается различиями для этих фиксаций.

      Обратите внимание, что это влияет на все типы вывода на основе различий (diff-based), например, те, которые производятся --stat и т. Д.

   --log-size

      Включит в вывод строку "log size < number>" для каждой фиксации, где < number> это длина сообщения фиксации в байтах. Опция предназначена для ускорения работы инструментария, который читает сообщения вывода лога команды git log, позволяя выделить заранее в памяти определенное место под сообщения.

   -L< start>,< end>:< file>, -L:< funcname>:< file>

      Выполнит трассировку эволюции диапазона строк, заданного < start >, < end >, или именем функции regex < funcname> в < file>. Вы можете не указывать какие-либо ограничители пути (pathspec limiters). Этот функционал в настоящий момент ограничен обходом, начинающимся с одиночной ревизии, например вы можете указать только ноль или один положительный аргумент ревизии, и < start> и < end> (или < funcname>) должны существовать в стартовой ревизии. Вы можете указывать эту опцию более одного раза. Опция подразумевает --patch. Вывод пути может быть подавлен --no-patch, однако другие форматы diff (а именно --raw, --numstat, --shortstat, --dirstat, --summary, --name-only, --name-status, --check) в настоящий момент не реализованы.

      < start> и < end> могут принимать одну из следующих форм:

      • число

         Если < start> или < end> это число, то оно указывает абсолютный номер строки (номера строк отсчитываются от 1).

      • /regex/

         Эта форма будет использовать первое совпадение строки по указанному выражению POSIX regex. Если < start> это regex, то произойдет поиск от конца предыдущего диапазона -L, если таковой есть, иначе от начала файла. Если < start> это ^/regex/, то произойдет поиск от начала файла. Если < end> это regex, то поиск начинается со строки, указанной < start>.

      • +offset или -offset

         Это допустимо только для < end>, и будет указывать количество строк перед или после строки, указанной < start>.

         Если указано < funcname> вместо < start> и < end>, это регулярное выражение, которое обозначает диапазон от первой строки funcname, которая соответствует < funcname> до следующей строки funcname. Если указано :< funcname>, то осуществляется поиск от конца предыдущего диапазона -L, если таковой присутствует, иначе от начала файла. Если указано ^:< funcname>, то поиск осуществляется от начала файла. Имена функций определяются тем же способом, как git diff работает с заголовками patch hunk (см. "Defining a custom hunk-header" в gitattributes(5)).

         Примечание: "hunk" дословно переводится как "ломоть", "кусок".

      < revision range>

         Будут показаны только фиксации в указанном диапазоне ревизий (revision range). Когда < revision range> не указан, то по умолчанию это HEAD (т. е. вся история фиксаций, начиная с текущей фиксации). origin..HEAD указывает все фиксации, доступные от текущей (т. е. HEAD), но не от origin. Для полного списка способов создания < revision range>, см. секцию "Specifying Ranges" в gitrevisions(7).

      [--] < path>...

         Покажет только фиксации, которые достаточны, чтобы объяснить, как появились файлы, соответствующие указанным путям. См. далее описание упрощения истории (History Simplification) для подробностей для других режимов упрощения вывода лога фиксаций.

         Могут понадобится префиксы -- для путей, чтобы отделить их от опций или от revision range, когда возникает путаница.

Опции ограничения вывода фиксаций (Commit Limiting)

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

   Использование дополнительных опций как правило дополнительно ограничивает вывод (например --since=< date1> ограничится фиксациями новее < date1>, и использование этого вместе с --grep=< pattern> дополнительно ограничивает вывод фиксациями, где строка сообщения лога совпадет с шаблоном < pattern>), если не указано что-либо иное.

   Обратите внимание, что эти опции применяются перед опциями, управляющими упорядочиванием и форматированием, такими как --reverse.

   -< number>, -n < number>, --max-count=< number>

      Ограничивает количество выводимых фиксаций.

   --skip=< number>

      Пропустит number фиксаций перед тем, как начать вывод списка фиксаций.

   --since=< date>, --after=< date>

      Покажет фиксации, которые более свежие, чем указанная дата date.

   --until=< date>, --before=< date>

      Покажет фиксации, которые старее чем указанная дата.

   --author=< pattern>, --committer=< pattern>

      Ограничит вывод фиксаций теми, которые соответствуют указанному шаблону (регулярному выражению) по строкам заголовка author/committer. Если указать больше одного --author=< pattern>, то будут выведены фиксации, соответствующие любому из указанных author (то же самое работает и для нескольких --committer=< pattern>).

   --grep-reflog=< pattern>

      Ограничит вывод фиксаций теми, у которых записи reflog совпадут с указанным шаблоном pattern (регулярным выражением). С более чем одним --grep-reflog будут выведены фиксации у которых сообщение reflog, совпадет с любым из указанных шаблонов. Использование этой опции является ошибкой, если не используется --walk-reflogs.

   --grep=< pattern>

      Ограничит вывод теми фиксациями, у которых сообщение лога совпадет с указанным шаблоном (регулярным выражением). С более чем одним --grep=< pattern> будут выведены фиксации, у которых сообщения соответствуют любому из указанных шаблонов (однако см. --all-match).

      Когда применена опция --notes, сообщение из примечаний (notes) сопоставляется, как если бы оно было частью сообщения лога.

   --all-match

      Ограничьте вывод фиксаций теми, которые соответствуют всем заданным шаблонам --grep сразу вместо тех, которые соответствуют хотя бы одному шаблону.

   --invert-grep

      Ограничит вывод фиксаций теми, сообщения лога у которых не соответствуют шаблону, указанному --grep=< pattern>.

   -i, --regexp-ignore-case

      Ограничивающие шаблоны регулярных выражений проверяются без обращения внимания на регистр символов (letter case).

   --basic-regexp

      Рассматривать ограничивающие шаблоны как базовые регулярные выражения (basic regular expressions); это поведение по умолчанию.

   -E, --extended-regexp

      Рассматривать ограничивающие шаблоны как расширенные регулярные выражения (extended regular expressions) вместо базовых регулярных выражений по умолчанию.

   -F, --fixed-strings

      Рассматривать ограничивающие шаблоны как фиксированные строки (не интерпретировать шаблон как регулярное выражение).

   -P, --perl-regexp

      Рассматривать ограничивающие шаблоны как Perl-совместимые регулярные выражения. Поддержка этих типов регулярных выражений является опциональной, зависящей от опций компиляции. Если Git не был скомпилирован для предоставления функционала этой опции, то её использование приведет к зависанию.

   --remove-empty

      Остановка при исчезновении заданного пути из дерева.

   --merges

      Печать только фиксаций слияния (merge commits). Это абсолютно то же самое, что и --min-parents=2.

   --no-merges

      Не печатать фиксации, у которых больше одного родителя. Это абсолютно то же самое, что и --max-parents=1.

   --min-parents=< number>, --max-parents=< number>, --no-min-parents, --no-max-parents

      Покажет только фиксации, у которых имеется как минимум (или не более) родительских фиксаций. В частности, --max-parents=1 это то же самое что и --no-merges, --min-parents=2 то же самое что --merges. Опция --max-parents=0 выдает все корневые фиксации, и --min-parents=3 выдаст все octopus-слияния. Опции --no-min-parents и --no-max-parents снова сбросят эти ограничения (в состояние, когда нет ограничения). Эквивалентные формы это --min-parents=0 (любая фиксация, к которой 0 или большее количество родительских) и --max-parents=-1 (отрицательные числа обозначают отсутствие верхнего ограничения).

   --first-parent

      Следует только первой родительской фиксации при просмотре фиксации слияния (merge commit). Эта опция может дать лучший обзор, когда просматривается эволюция определенной темы ветки (topic branch), поскольку слияния в topic branch как правило заключаются только в корректировке время от времени обновлений исходной ветки, и эта опция позволит вам игнорировать отдельные фиксации, внесенные в вашу историю по причине таких слияний.

      Это опция также меняет формат по умолчанию diff для фиксаций слияния на first-parent, см. подробности в --diff-merges=first-parent.

   --not

      Меняет смысл префикса ^ (или его отсутствие) на обратный для всех последующих спецификаторов ревизии, до следующего --not.

   --all

      Представим, что все ссылки в refs/, вместе с HEAD, перечислены в командной строке как < commit>.

   --branches[=< pattern>]

      Представим, как если бы все ссылки в refs/heads были перечислены в командной строке как < commit>. Если указан < pattern>, то ограничит ветви теми, которые соответствуют указанной глобальной оболочке (shell glob). Если в шаблоне нет ?, * или [, то в конце подразумевается /*.

   --tags[=< pattern>]

      Представим, как если бы все ссылки в refs/tags are были перечислены в командной строке как < commit>. Если указан < pattern>, то ограничит теги теми, которые соответствуют указанной глобальной оболочке (shell glob). Если в шаблоне нет ?, * или [, то в конце подразумевается /*.

   --remotes[=< pattern>]

      Представим, как если бы все ссылки в refs/remotes are были перечислены в командной строке как < commit>. Если указан < pattern>, то ограничит remote-tracking ветки теми, которые соответствуют указанной глобальной оболочке (shell glob). Если в шаблоне нет ?, * или [, то в конце подразумевается /*.

   --glob=< glob-pattern>

      Представим, как если бы все ссылки, соответствующие глобальной оболочке < glob-pattern> были перечислены в командной строке как < commit>. Начальные refs/ добавляются автоматически, если они отсутствуют. Если в шаблоне нет ?, * или [, в конце подразумевается /*.

   --exclude=< glob-pattern>

      Не включать ссылки, соответствующие < glob-pattern>, которые в противном случае рассматривали бы следующие --all, --branches, --tags, --remotes или --glob. Повторы этой опции накапливают шаблоны исключения до следующих опций --all, --branches, --tags, --remotes или --glob option (другие опции или аргументы не очищают накопленные шаблоны).

      Предоставленные шаблоны не должны начинаться с refs/heads, refs/tags или refs/remotes, когда применяются к --branches, --tags или --remotes соответственно, и они должны начинаться с refs/, когда применяются к --glob или --all. Если предполагается использование /*, то это должно быть указано явно.

   --reflog

      Представим, как если бы все объекты, упомянутые в reflogs, были перечислены в командной строке как < commit>.

   --alternate-refs

      Представим, как если бы все объекты, упомянутые как ref tips альтернативных репозиториев были перечислены в командной строке. Альтернативный репозиторий это любой репозиторий, директория объекта которого указана в objects/info/alternates. Набор подключенных объектов может быть изменен через core.alternateRefsCommand, и т. д. См. git-config(1).

   --single-worktree

      По умолчанию все рабочие ветви (working trees) будут проверяться следующими опциями, когда их больше одной (см. git-worktree(1)): --all, --reflog и --indexed-objects. Эта опция заставляет принудительно проверять только текущую рабочую ветвь (current working tree).

   --ignore-missing

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

   --bisect

      Представим, что в списке значатся плохие bisection ref refs/bisect/bad, и что за ним в командной строке следует --not и хорошие bisection refs refs/bisect/good-*.

   --stdin

      В дополнение к < commit>, перечисленному в командной строке, читать опции из стандартного ввода. Если обнаружен сепаратор --, то остановить чтение фиксаций и начать читать пути для ограничения результата.

   --cherry-mark

      Наподобие --cherry-pick (см. далее), однако помечать эквивалентные фиксации = вместо того, чтобы их упускать, и неравноценные помечать +.

   --cherry-pick

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

      Например, если у вас есть две ветви A и B, то обычный способ перечислить все фиксации только на одной их стороне, это применить --left-right (см. далее пример в описании опции --left-right). Однако это покажет фиксации, которые относятся к операции cherry-pick из другой ветви (например "3-я на b” может быть cherry-pick-нута из ветви A). С этой опцией такие пары фиксаций исключаются из вывода.

   --left-only, --right-only

      Будут выведены только фиксации на соответствующей стороне симметрического различия, т. е. только те, которые будут помечены < resp. > --left-right.

      Например, --cherry-pick --right-only A...B пропустит эти фиксации от B, которые в A или patch-equivalent для фиксации в A. Другими словами, это перечислит + фиксации от git cherry A B. Более точно, --cherry-pick --right-only --no-merges даст тот же список.

   --cherry

      Синоним для --right-only --cherry-mark --no-merges. Полезно для ограничения вывода для фиксаций на вашей стороне и пометки тех, которые были применены на другой стороне разветвленной истории с помощью git log --cherry upstream...mybranch, подобно git cherry upstream mybranch.

   -g, --walk-reflogs

      Вместо того, чтобы просмотреть цепочку предков фиксаций, осуществляется просмотр записей reflog от самого свежего до самого старого. Когда используется эта опция, вы не можете указать исключаемые фиксации (т. е. нельзя использовать нотации ^commit, commit1..commit2 и commit1...commit2).

      Для --pretty формата, отличного от oneline и reference (по очевидным причинам), это даст вывод дополнительных строк информации, полученной из reflog. Обозначение reflog в выводе может быть показано как ref@{Nth} (где Nth это reflog-индекс в обратном хронологическом порядке), или как ref@{timestamp} (с меткой времени для этой записи), в зависимости от нескольких правил:

         1. Если начальная точка указывается как ref@{Nth}, то показывается формат индекса.
         2. Если начальная точка указывается как ref@{now}, то показывается формат метки времени.
         3. Если не было ничего указано из этого, однако в командной строке присутствует --date, то показывается метка времени, запрошенная опцией --date.
         4. Иначе показывается формат индекса.

      С помощью --pretty=oneline сообщение фиксации снабжается префиксом с этой информацией на той же строке. Эта опция не может комбинироваться с --reverse. См. также git-reflog(1).

      С опцией --pretty=reference эта информация вообще не будет показана.

   --merge

      После ошибочного слияния (failed merge) показывает ссылки, которые касаются файлов, имеющих конфликт, и не существующих на всех заголовках для merge.

   --boundary

      Вывод исключенных фиксаций границ (excluded boundary commits). Фиксация границ имеет префикс -.

Упрощение истории фиксаций (History Simplification)

   Иногда вас интересуют только определенные части истории, например фиксации, изменяющие определенный < path>. Однако с этим связаны 2 части History Simplification, одна часть относится к выбору фиксаций, и другая определяет как это делается, так что существует 2 стратегии упрощения истории.

   Следующие опции выбирают фиксации, которые должны быть показаны:

   < paths>

      Выбираются фиксации, модифицирующие указанные пути < paths>.

   --simplify-by-decoration

      Выбираются фиксации, относящиеся к некоторой ветви или тегу.

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

   Следующие опции влияют на способ, как выполняется упрощение:

   Режим по умолчанию. Упрощает историю на простейший вариант, показывающий конечное состояние дерева. Вариант простейший, потому что он срезает некоторые боковые ветви, если конечный результат получается одинаковым (например ветки слияния с одинаковым содержимым).

   --show-pulls

      Включает все фиксации из режима по умолчанию, однако также любые фиксации слияния (merge commits), которые не TREESAME для первого родителя, однако TREESAME для последующего родителя. Этот режим помогает отобразить фиксации слияния, которые "первые добавили" изменения ветви.

   --full-history

      То же самое, что и режим о умолчанию, но не вырезает некоторую историю.

   --dense

      Показываются только выбранные фиксации, плюс некоторые, чтобы получилась осмысленная история.

   --sparse

      В упрощенной истории показываются все фиксации.

   --simplify-merges

      Дополнительная опция для --full-history, чтобы удалить некоторые ненужные слияния из результирующей истории, поскольку нет некоторых фиксаций, способствующих этому слиянию.

   --ancestry-path

      Когда для отображения указывается диапазон фиксаций (например commit1..commit2 ил commit2 ^commit1), показываются только фиксации, которые существуют непосредственно в цепочке предков между commit1 и commit2, например фиксации, которые являются как потомками commit1, так и предками commit2.

      Ниже дано более подробное объяснение.

      Предположим, что вы указали foo как путь < paths>. Мы будем называть фиксации, которые модифицируют foo как !TREESAME, и остальные как TREESAME (в отфильтрованном diff для foo они выглядят соответственно разными и одинаковыми).

      Далее мы всегда будем ссылаться на один и тот же пример истории, чтобы показать различия между настройками упрощения. Предположим, что вы фильтруете по файлу foo в этом графе фиксаций:

                     .-A---M---N---O---P---Q
                    /     /   /   /   /   /
                   I     B   C   D   E   Y
                    \   /   /   /   /   /
                     `-------------'   X

      Горизонтальная линия истории A---Q считается первым родителем каждого слияния. Фиксации следующие:

      • I это первоначальная фиксация, в которой файл foo существует с содержимым “asdf”, и файл quux существует с содержимым “quux”. Начальные фиксации сравниваются с пустым деревом, так что I это !TREESAME.
      • В A файл foo содержит просто “foo”.
      • B содержит те же изменения, что и A. Их слияние M тривиально, и таким образом TREESAME для всех родителей.
      • C не поменяло foo, но его слияний N поменяло его на “foobar”, так что это не TREESAME для любого родителя.
      • D установило foo в “baz”. Его слияние O комбинирует строки из N и D в “foobarbaz”; т. е. это не TREESAME для любого родителя.
      • E меняет quux на “xyzzy”, и слияние P комбинирует строки на “quux xyzzy”. P это TREESAME для O, но не для E.
      • X это независимая root-фиксация, которая добавила новый file side, и Y изменило его. Здесь Y это TREESAME для X. Его слияние Q добавило side для P, и Q это TREESAME для P, но не для Y.

      rev-list делает обратный просмотр по истории, включая или исключая фиксации, основанные на том, используется ли --full-history и/или родительская перезапись (через --parents или --children). Доступны следующие настройки.

   Режим по умолчанию. Фиксации включаются, если они не TREESAME для любого родителя (хотя это можно поменять, см. ниже --sparse). Если фиксация была слиянием, и это было TREESAME для одного родителя, происходит следование только одному родителю (даже если есть несколько родителей TREESAME, следование происходит только одному из них). Иначе происходит следование всем родителям.

      В результате:

                         .-A---N---O
                        /     /   /
                       I---------D

      Обратите внимание, как правило следовать только за TREESAME родителем, если он доступен, полностью удалило B из рассмотрения. C рассматривался через N, но является TREESAME. Корневые фиксации сравниваются с пустым деревом, так что I это !TREESAME.

      Взаимоотношения родитель/потомок видны только с использованием --parents, но это не влияет на фиксации, выбранные в режиме по умолчанию, так что показываются родительские строки.

   --full-history без перезаписи родителя. Этот режим отличается от режима по умолчанию в одном месте: всегда происходит следования всем родителям слияния, даже если это TREESAME для одного из них. Даже если более одной стороны слияния имеет фиксации, которые включены, это не означает что было само слияние! В этом примере мы получаем

                       I  A  B  N  D  O  P  Q

      M было исключено, потому что это TREESAME для обоих родителей. Просмотрены E, C и B, но только B было !TREESAME, так что другие не появились.

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

   --full-history с перезаписью родителей. Включены только обычные фиксации, если они !TREESAME (хотя это можно поменять, см. далее --sparse).

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

                         .-A---M---N---O---P---Q
                        /     /   /   /   /
                       I     B   /   D   /
                        \   /   /   /   /
                         `-------------'

      Сравните пример выше для --full-history, без перезаписи. Обратите внимание, что E был вырезан, потому что это TREESAME, однако родительский список P был перезаписан, чтобы содержать родителя I для E. То же самое произошло для C и N, а также X, Y и Q.

      В дополнение к показанным выше настройкам вы можете поменять, влияет ли TREESAME на включение:

   --dense

      Просмотренные фиксации включаются, если они не TREESAME для любого родителя.

   --sparse

      Включаются все просмотренные фиксации.

      Обратите внимание, что без --full-history это все еще упрощает слияния: если один из родителей TREESAME, мы следуем только ему, поэтому другие стороны слияния не просматриваются.

   --simplify-merges

      Сначала строится граф истории так же, как это делает --full-history с перезаписью родителей (см. выше). Затем упрощается каждая фиксация C с заменой конечной истории C' по следующим правилам:

      • Устанавливается C' в C.
      • Заменяется каждый родитель P для C' на его упрощение P'. В этом процессе отбрасываются родители, которые являются предками других родителей, или которые являются root-фиксациями TREESAME для пустого дерева, и удаляются дубликаты. Однако обеспечивается отсутствие отбрасывания всех родителей, для которых мы также TREESAME.
      • Если после такой родительской перезаписи C' является root или фиксаций слияния (имеет 0 или больше 1 родителя), остается граничная фиксация, или !TREESAME. Иначе это заменяется на единственного родителя.

      Эффект от этого лучше показать способом сравнения с --full-history, где была перезапись родителя. Этот пример превращается в следующее:

                         .-A---M---N---O
                        /     /       /
                       I     B       D
                        \   /       /
                         `---------'

      Обратите внимание на основные отличия в N, P, и Q по сравнению с --full-history:

      • В родительском списке N удален I, потому что он предок другого родителя M. Все еще остается N, потому что он !TREESAME.
      • В родительском списке P аналогично удален I. P затем был полностью удален, потому что у него был один родитель, и он TREESAME.
      • В родительском списке Q был Y упрощен до X. Затем X был удален, потому что был TREESAME root. Затем Q был полностью удален, потому что у него был один родитель, и он TREESAME.

      Имеется другой режим упрощения:

   --ancestry-path

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

      В качестве примера рассмотрим следующую историю фиксации:

                           D---E-------F
                          /     \       \
                         B---C---G---H---I---J
                        /                     \
                       A-------K---------------L--M

      Обычный D..M вычисляет набор фиксаций, которые являются предками M, но исключают те, которые являются предками D. Это полезно, чтобы увидеть, что случилось с историей, ведущей к M, начиная с D, в том смысле, что "то, что есть в M, не существует в D". Результатом в этом примере будут все фиксации, кроме A и B (и конечно самого D).

      Однако когда мы хотим выяснить, какие фиксации в M загрязнены ошибкой, внесенной в D, и нуждаются в исправлении, мы можем захотеть просмотреть только подмножество D..M, которое на самом деле является потомками D, т. е. исключают C и K. Это именно то, что делает опция --ancestry-path. Применительно к диапазону D..M, получится следующий результат:

                               E-------F
                                \       \
                                 G---H---I---J
                                              \
                                               L--M

      Перед обсуждением следующей опции --show-pulls нам надо создать новый пример истории.

      Общая проблема, с которой сталкиваются пользователи, когда просматривают упрощенную историю: фиксация, про которую они знают, что она измененная, не появляется в файле упрощенной истории. Давайте продемонстрируем новый пример и покажем, как такая опция, как --full-history и --simplify-merges работает в этом случае:

                     .-A---M-----C--N---O---P
                    /     / \  \  \/   /   /
                   I     B   \  R-'`-Z'   /
                    \   /     \/         /
                     \ /      /\        /
                      `---X--'  `---Y--'

      Для этого примера предположим, что I содержит созданный file.txt, который был различными способами изменен в A, B и X. Фиксации с одиночным родителем C, Z и Y не меняли file.txt. Фиксация слияния M была создана с разрешением конфликта слияния, чтобы включать оба изменения A и B, и таким образом она не TREESAME ни для одного из них. Однако фиксация слияния R была создана путем игнорирования содержимого file.txt на M, и было взято только содержимое file.txt на X. Таким образом, R это TREESAME для X, но не для M. Наконец, естественное разрешение слияния для создания N заключается в том, чтобы взять содержимое file.txt на R, так что N это TREESAME для R, но не для C. Фиксации слияния O и P это TREESAME для их первых родителей, но не для их вторых родителей, Z и Y соответственно.

      Когда используется режим по умолчанию, у обоих N и R родитель TREESAME, так что эти крайние фиксации просматриваются, а другие игнорируются. Получится результирующий граф истории:

                   I---X

      Когда используется --full-history, Git просматривает каждую крайнюю фиксацию. Это раскроет фиксации A и B, и слияние M, но также раскроет фиксации слияния O и P. С перезаписью родителей получится результирующий граф:

                     .-A---M--------N---O---P
                    /     / \  \  \/   /   /
                   I     B   \  R-'`--'   /
                    \   /     \/         /
                     \ /      /\        /
                      `---X--'  `------'

      Здесь фиксации слияния O и P вводят дополнительный шум, поскольку они фактически не вносят изменения в file.txt. Они только объединили ветвь, основанную на более старой версии file.txt. Эта общая проблема в репозиториях, использующих рабочий процесс, где многие поставщики изменений кода работают параллельно, и делают слияния своих ветвей по одному стволу: в результатах --full-history появляются многие не связанные слияния.

      При использовании опции --simplify-merges из результатов пропадут O и P. Это потому, что перезаписаны вторые родители O и P, доступные их их первых родителей. Эти крайние фиксации удалены, и тогда фиксации выглядят наподобие имеющих одного родителя, которые TREESAME для своего родителя. Это также произойдет для фиксации N, в результате получится следующий вид истории:

                     .-A---M--.
                    /     /    \
                   I     B      R
                    \   /      /
                     \ /      /
                      `---X--'

      Здесь мы видим все важные изменения от A, B и X с одиночным родителем. Мы также видим качественно разрешенное слияние M и не качественно разрешенное слияние R. Это обычно достаточная информация, чтобы понять, почему слияния A и B "пропали" из истории в просмотре по умолчанию. Однако в таком способе есть несколько проблем.

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

      Вторая проблема касается аудита. Когда многие поставщики изменений работают на одном и том же репозитории, важным вопросом будет какие фиксации слияния внесли изменения в значимую ветвь. Проблематичное слияние R, показанное выше, вряд ли будет фиксацией слияния, которая использовалась бы для слияния в значимую ветвь. Вместо этого слияние N было использовано для слияния R и X в важную ветвь. Эта фиксация может содержать информацию от том, почему поступило изменение X, чтобы отменить изменения от A и B в его сообщении фиксации.

   --show-pulls

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

      Когда фиксация слияния включена опцией --show-pulls, слияние обрабатывается как если бы оно "затянуло" (pull) изменения из другой ветви. Когда используется --show-pulls в этом примере (и без других опций), получится следующий результирующий граф:

                       I---X---R---N

      Здесь фиксации слияния R и N включены, потому что они затянули соответственно фиксации X и R в базовую ветвь. Эти слияния являются причиной, по которой фиксации A и B не появились в истории по умолчанию.

      Когда --show-pulls используется в паре с --simplify-merges, граф включает всю необходимую информацию:

                         .-A---M--.   N
                        /     /    \ /
                       I     B      R
                        \   /      /
                         \ /      /
                          `---X--'

      Обратите внимание, что поскольку M достижима из R, край из N до M все равно упрощен. Однако N все еще появилась в истории, поскольку она выступает важной фиксаций, потому что "затянула" изменение R в основную ветвь.

      Опция --simplify-by-decoration позволяет вам увидеть только большую картину топологии истории, опуская фиксации, на которые нет ссылок по тегам. Фиксации помечены как !TREESAME (другими словами, сохранены после упрощения истории по описанным выше правилам), если (1) на них ссылаются тегами, или (2) они меняют содержимое путей, указанных в командной строке. Все другие фиксации помечаются как TREESAME (являются так или иначе субъектами упрощения).

Упорядочивание фиксаций

   По умолчанию фиксации показываются в обратном хронологическом порядке (в начале списка самые свежие фиксации).

   --date-order

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

   --author-date-order

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

   --topo-order

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

      Например, в истории фиксаций наподобие этой:

                   ---1----2----4----7
                       \              \
                        3----5----6----8---

      ... где номера обозначают порядок следования меток фиксаций, git rev-list в содружестве с --date-order покажут фиксации в порядке меток времени: 8 7 6 5 4 3 2 1.

      С опцией --topo-order, они были бы показаны как 8 6 5 3 7 4 2 1 (или 8 7 4 2 6 5 3 1); некоторые более старые фиксации будут показаны раньше более новых, чтобы избежать перемешивания отображения фиксаций из двух параллельных треков разработки.

   --reverse

      Выводит список фиксаций в обратном порядке (см. выше секцию "Опции ограничения вывода фиксаций"). Эта опция не может сочетаться с --walk-reflogs.

Обход объекта (Object Traversal)

   Эти опции нацелены главным образом на упаковку репозиториев Git.

   --no-walk[=(sorted|unsorted)]

      Показать только данные фиксации, без пересечения их предков. Это не влияет, если указан диапазон. Если указан аргумент unsorted, будут показаны фиксации в порядке, который был задан в командной строке. Иначе (если указано sorted, или не был указан аргумент) фиксации показываются в обратном хронологическом порядке по времени фиксации. Эта опция не может комбинироваться вместе с --graph.

   --do-walk

      Отменяет действие предыдущей опции --no-walk.

Commit Formatting

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

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

      См. секцию "PRETTY-форматы" для некоторых дополнительных деталей по каждому формату. Когда часть =< format> опущена, по умолчанию используется medium.

      Замечание: вы можете указать формат по умолчанию для pretty в конфигурации репозитория (см. 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, что запрещает расширение табуляции.

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

   --notes[=< ref>]

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

      По умолчанию отображаемые заметки берутся из ссылок на заметки (notes refs), перечисленных в переменных core.notesRef и notes.displayRef (или отменяющих их действия переменных окружения). Более подробную информацию см. в git-config(1).

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

      Несколько опций --notes могут комбинироваться, чтобы управлять тем, какие заметки будут отображаться. Примеры:

         "--notes=foo" покажет только заметки из "refs/notes/foo"; "--notes=foo --notes" покажут заметки из обоих "refs/notes/foo" и из ссылки (ссылок) на заметки по умолчанию.

   --no-notes

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

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

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

   --show-signature

      Проверка достоверности подписанного объекта фиксации передачей сигнатуры в gpg --verify, и отображение вывода.

   --relative-date

      Синоним --date=relative.

   --date=< format>

      Дает эффект только для дат, показанных в удобочитаемом для человека формате, таком как при использовании --pretty. Переменная конфигурации log.date устанавливает значение по умолчанию для опции --date. По умолчанию даты показываются в оригинальной временной зоне (либо committer-а, либо author-а). Если присоединено -local к формату, (например iso-local), вместо этого используется локальная зона времени пользователя.

   --date=relative покажет даты относительно текущего времени, например "за предыдущие у часа" (2 hours ago). Опция -local не дает эффект для --date=relative.

   --date=local это псевдоним для --date=default-local.

   --date=iso (или --date=iso8601) покажет метки времени в формате наподобие ISO 8601. Отличия от строгого формата ISO 8601 следующие:

      • пробел вместо разделителя T даты/времени
      • пробел между временем и зоной времени
      • нет двоеточия между часами и минутами зоны времени

   --date=iso-strict (или --date=iso8601-strict) показывает метки времени в строгом формате ISO 8601.

   --date=rfc (или --date=rfc2822) показывает метки времени в формате RFC 2822, который часто можно найти в сообщениях email.

   --date=short покажет только дату, но не время, в формате YYYY-MM-DD.

   --date=raw покажет дату в секундах относительно эпохи (epoch 1970-01-01 00:00:00 UTC), с последующим пробелом, и затем зону времени как смещение от UTC (+ или - с 4 цифрами; первые 2 это часы, и вторые 2 минуты). Например как если бы метка времени была отформатирована с strftime("%s %z")). Обратите внимание, что опция -local не влияет на значение секунд относительно эпохи (seconds-since-epoch, что всегда измеряется в UTC), но переключает соответствующее значение часового пояса.

   --date=human покажет зону времени (timezone, часовой пояс), если зона времени не соответствует текущей time-zone, не напечатает всю дату, если зона соответствует (т. е. будет пропущена печать года для дат, которые относятся к "этому году", но также пропустит саму всю дату, если она была последние несколько дней, и мы можем просто сказать какой был будний день). Для более старых дат часы и минуты также опускаются.

   --date=unix покажет дату как метку времени Unix epoch (количество секунд от 1970 года). Как с --raw, это всегда в UTC, и таким образом -local не дает эффекта.

   --date=format:... передает format ... в strftime вашей системы, кроме для %z и %Z, которые обрабатываются внутренне. Используйте --date=format:%c, чтобы показать дату в вашем предпочтительном локальном системном формате. См. руководство по strftime для полного списка возможностей форматирования. Когда используется -local, корректный синтаксис следующий:

      --date=format-local:....

      --date=default это формат по умолчанию, и работает подобно --date=rfc2822, с несколькими исключениями:

      • здесь нет запятой после дня недели
      • зона времени опускается, когда используется локальная зона времени

   --parents

      Напечатает также родителей фиксации (в форме "commit parent..."). Также разрешает перезапись родителя (parent rewriting), см. выше секцию "Упрощение истории".

   --children

      Напечатает также потомка фиксации (в форме "commit child..."). Также разрешает перезапись родителя (parent rewriting), см. выше секцию "Упрощение истории".

   --left-right

      Отметит, с какой стороны симметричной разницы доступна фиксация. Фиксации с левой стороны снабжаются префиксом < и с правой стороны префиксом >. В комбинации с --boundary, эти фиксации снабжаются префиксом -.

      Например, если у вас такая топология:

                            y---b---b  branch B
                           / \ /
                          /   .
                         /   / \
                        o---x---a---a  branch A

      ... то вы получили бы такой вывод:

 

                       $ git rev-list --left-right --boundary --pretty=oneline A...B

                       >bbbbbbb... 3rd on b
                       >bbbbbbb... 2nd on b
                       < aaaaaaa... 3rd on a
                       < aaaaaaa... 2nd on a
                       -yyyyyyy... 1st on b
                       -xxxxxxx... 1st on a

   --graph

      Нарисует с помощью символов графическое представление истории фиксаций в левой части выходных данных. Это может привести к выводу дополнительных строк между фиксациями, чтобы граф истории мог быть правильно нарисован. Не может комбинироваться с --no-walk.

      Это разрешает перезапись родителя см. выше секцию "Упрощение истории". По умолчанию это подразумевает опцию --topo-order, но также может быть указана опция --date-order.

   --show-linear-break[=< barrier>]

      Когда не используется --graph, все ветви истории сводятся, что может затруднить понимание того, что две последовательные фиксации не принадлежат линейной ветви. Эта опция в этом случае вводит барьер между ними. Если указан < barrier>, то будет отображаться строка вместо строки по умолчанию.

PRETTY-форматы

   Если фиксация это слияние, и если pretty-формат не oneline, email или raw, вставляется дополнительная строка перед Author: line. Эта строка начинается на "Merge: ", и печатаются хэши родовых фиксаций, разделенные пробелами. Обратите внимание, что перечисленные фиксации не обязательно не обязательно могут быть списком прямых родительских фиксаций, если вы ограничили свое представление истории: например, если вам только интересны изменения, связанные с определенным каталогом или файлом.

   Здесь есть несколько встроенных форматов, и вы можете определить дополнительные форматы путем установки опции конфигурации pretty.< name> либо в другое имя формата, либо в format: string, как это описано ниже (см. git-config(1)). Вот описание этих встроенных форматов:

      • oneline

         < hash> < title line>

         Этот вариант разработан быть максимально компактным.

      • short

         commit < hash>
         Author: < author>
         < title line>

      • medium

         commit < hash>
         Author: < 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: < дата автора>
         Commit:     < committer>
         CommitDate: < дата committer>
         < title line>
         < full commit message>

      • reference

         < abbrev hash> (< title line>, < short дата автора>)

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

      • email

         From < hash> < date>
         From: < author>
         Date: < дата автора>
         Subject: [PATCH] < title line>
         < full commit message>

      • mboxrd

         Работает наподобие email, однако строки в сообщении фиксации (commit message) начиная с "From " (с предшествующими 0 или большего количества ">") обрамляются ">", чтобы не перепутать с началом новой фиксации.

      • raw

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

      • format:< string>

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

         Например, формат:"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

                  печать байта как hex-кода

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

               %Cred

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

               %Cgreen

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

               %Cblue

                  переключение на голубой цвет

               %Creset

                  сброс цвета

               %C(...)

                  цветовая спецификация, как описано в разделе Values секции документации "CONFIGURATION FILE" git-config(1). По умолчанию цвета показываются только когда это разрешено для вывода лога (через color.diff, color.ui, или --color, и с учетом настроек auto первого, если мы идем к терминалу). %C(auto,...) принимается как исторический синоним для настроек цвета по умолчанию (например, %C(auto,red)). Указание %C(always,...) покажет цвета, даже если цвет не включен иным образом (хотя подумайте о том, чтобы просто использовать --color=always, чтобы разрешит цвета для всего вывода, включая этот формат и все остальное, что может подкрасить git). auto alone (т. е.  %C(auto)) включит автоматическое подкрашивание следующих местозаполнителей, пока цвет не переключится снова.

               %m

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

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

                  переключение перехода строки, наподобие опции -w для git-shortlog(1).

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

                  делает так, что следующий местозаполнитель займет как минимум N столбцов, с дополнением пробелами, если это необходимо. Опционально делается усечение в начале (ltrunc), посередине (mtrunc) или в конце (trunc), если вывод длиннее, чем N столбцов. Обратите внимание, что усечение корректно работает только для N >= 2.

               %< |(< N>)

                  делает так, что следующий местозаполнитель займет как минимум N столбцов, с дополнением пробелов справа при необходимости

               %>(< N>), %>|(< N>)

                  подобно %< (< N>), %< |(< N>) соответственно, но с дополнением пробелами слева

               %>>(< N>), %>>|(< N>)

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

               %>< (< N>), %>< |(< N>)

                  подобно %< (< N>), %< |(< N>) соответственно, но дополнение происходит с обоих сторон (т. е. текст центрируется)

           • Местозаполнители, которые расширяются до информации, извлеченной из фиксации:

               %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

                  local-part от email автора (то, что перед символом @)

               %aL

                  local-part автора (см. %al) по отношению к .mailmap, см. git-shortlog(1) или git-blame(1))

               %ad

                  дата автора (соблюдается формат опции --date=)

               %aD

                  дата автора, стиль RFC2822

               %ar

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

               %at

                  дата автора, UNIX timestamp

               %ai

                  дата автора, формат в стиле ISO 8601

               %aI

                  дата автора, строгий формат ISO 8601

               %as

                  дата автора, короткий (YYYY-MM-DD)

               %ah

                  дата автора, удобный для чтения человеком стиль (наподобие опции --date=human, см. git-rev-list(1))

               %cn

                  имя committer

               %cN

                  имя committer (по отношению к .mailmap, см. git-shortlog(1) или git-blame(1))

               %ce

                  committer email

               %cE

                  committer email (по отношению к .mailmap, см. git-shortlog(1) или git-blame(1))

               %cl

                  committer email local-part (часть перед символом @)

               %cL

                  committer local-part (см. %cl) по отношению к .mailmap, см. git-shortlog(1) или git-blame(1)

               %cd

                  дата committer (соблюдение формата опции --date=)

               %cD

                  дата committer, стиль RFC2822

               %cr

                  дата committer, относительно

               %ct

                  дата committer, UNIX timestamp

               %ci

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

               %cI

                  дата committer, строгий формат ISO 8601

               %cs

                  дата committer, короткий формат (YYYY-MM-DD)

               %ch

                  дата committer, удобный для чтения человеком стиль (наподобие опции --date=human, см. git-rev-list(1))

               %d

                  имена ссылок (ref names), наподобие опции --decorate для git-log(1)

               %D

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

               %(describe[:options])

                  удобное для чтения человеком имя, наподобие git-describe(1); пустая строка для не описываемых фиксаций. Строка описания describe может завершаться двоеточием и нулевым или большим количеством опций, разделенных запятой. Описания могут быть неполными, когда одновременно добавляются или удаляются теги.

                  • match=< pattern>: рассматриваются только теги, соответствующие указанному шаблону glob(7), исключая префикс "refs/tags/".

                  • exclude=< pattern>: не рассматриваются теги, соответствующие указанному шаблону glob(7), исключая префикс"refs/tags/".

               %S

                  имя ссылки (ref name), указанное в командной строке, с помощью которой была достигнута фиксация (наподобие log --source), работает только с git log

               %e

                  кодировка (encoding)

               %s

                  тема (subject)

               %f

                  очищенная строка темы, подходит для имени файла

               %b

                  тело (body)

               %B

                  сырое тело (raw body, развернутые subject и body)

               %N

                  заметки фиксации (commit notes)

               %GG

                  сырое проверочное сообщение из GPG для подписанной фиксации

               %G?

                  покажет "G" для хорошей (достоверной) сигнатуры, "B" для плохой сигнатуры, "U" для хорошей сигнатуры с неизвестным источником (unknown validity), "X" для хорошей сигнатуры, срок действия которой истек (expired), "Y" для хорошей сигнатуры, сделанной по истекшему ключу, "R" для хорошей сигнатуры, сделанной по отозванному ключу, "E" если сигнатура не может быть проверена (например из-за отсутствия ключа), и "N" когда сигнатуры нет

               %GS

                  показать имя подписавшего для фиксации с сигнатурой

               %GK

                  показать ключ, использовавшийся для фиксации с сигнатурой

               %GF

                  показать fingerprint ключа, использовавшегося для подписи фиксации с сигнатурой

               %GP

                  показать fingerprint основного ключа (primary key), у которого субключ использовался для подписи фиксации с сигнатурой

               %GT

                  показать уровень доверия для ключа, используемого для подписи фиксации с сигнатурой

               %gD

                  селектор reflog, например refs/stash@{1} или refs/stash@{2 minutes ago}; формат следует правилам, описанным для опции -g. Часть перед @ это ссылочное имя (refname), как оно указано в командной строке (так git log -g refs/heads/master даст refs/heads/master@{0}).

               %gd

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

               %gn

                  идентификационное имя (identity name) reflog

               %gN

                  идентификационное имя reflog (по отношению к .mailmap, см. git-shortlog(1) или git-blame(1))

               %ge

                  идентификационное reflog email

               %gE

                  идентификационное reflog email (по отношению к .mailmap, см. git-shortlog(1) или git-blame(1))

               %gs

                  тема (subject) reflog

               %(trailers[:options])

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

                  Двоичные (boolean) принимают опциональное значение [=< BOOL>]. Принимаются все значения true, false, on, off и т. п. См. подсекцию "boolean" в разделе "EXAMPLES" git-config(1). Если boolean-опция указана без значения, то она разрешена.

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

                  • only[=< BOOL>]: выбирает, следует ли включать строки, не относящиеся к трейлерам, из блока трейлеров.

                  • separator=< SEP>: указывает разделитель, вставляемый между строками трейлера. Когда эта опция не указана, каждая строка трейлера завершается символом перевода строки. Строка string SEP может содержать литеральные коды форматирования, описанные выше. Для использования запятой в качестве разделителя необходимо применить %x2C, так как иначе она будет интерпретирована как следующая опция. Например %(trailers:key=Ticket,separator=%x2C) покажет все строки трейлера с ключом "Ticket", разделенные запятой и пробелом,

                  • unfold[=< BOOL>]: вводит поведение как если бы была задана опции интерпретации трейлера --unfold. Например %(trailers:only,unfold=true) разворачивается и показывает все строки трейлера.

                  • keyonly[=< BOOL>]: показывает только ключевую часть трейлера.

                  • valueonly[=< BOOL>]: показывает только часть значения трейлера.

                  • key_value_separator=< SEP>: указывает разделитель, вставляемый между строками трейлера. Когда эта опция не указана, пары key-value трейлера разделяются через ": ". Иначе используется та же семантика, как и в описанном выше separator=< SEP>.

   Примечание: некоторые местозаполнители могут зависеть от других опций, предоставленных для механизма обхода ревизий (revision traversal engine). Например, опции %g* reflog будут вставлять пустую строку, если мы не просматриваем записи reflog (например через git log -g). Здесь %d и %D местозаполнители будут использовать "короткий" (short) формат декорации, если в командной строке не была уже предоставлена опция --decorate.

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

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

   Если вы добавите ` ` (пробел) после % местозаполнителя, будет вставлен пробел непосредственно перед расширением, если и только если местозаполнитель расширяется в непустую строку.

      • tformat:

         Формат tformat: работает точно так же, как и format:, за исключением того, что tformat: предоставляет семантику "терминатора" вместо семантики "разделителя". Другими словами, каждая фиксация имеет присоединенный символ терминатора сообщения (обычно это символ новой строки) вместо того, чтобы между элементами вставлялся сепаратор. Это означает, что последний элемент однострочного формата будет правильно завершаться новой строкой, так же как это делает формат "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

DIFF форматирование

   По умолчанию git log не генерирует никакой diff-вывод. Описанные ниже опции могут использоваться, чтобы показать изменения, внесенные каждой фиксацией.

   Обратите внимание, что до тех пор, пока не будет явно задан один из вариантов --diff-merges включая (короткие опции -m, -c и --cc), фиксации слияния не покажут diff, даже если был выбран diff-формат наподобие--patch, и они не будут соответствовать параметрам поиска, таким как -S. Исключением будет использование --first-parent, в этом случае форматом по умолчанию станет first-parent.

   -p, -u, --patch

      Генерирует патч (см. секцию с описанием генерации патчей).

   -s, --no-patch

      Подавляет вывод diff. Полезно для команд наподобие git show, которые по умолчанию показывают patch, или для отмены эффекта опции --patch.

   --diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc), --no-diff-merges

      Задает формат diff, используемый для фиксаций слияния. По умолчанию используется off, если не была использована опция --first-parent, в которой по умолчанию применяется first-parent.

   --diff-merges=(off|none), --no-diff-merges

      Запрещает вывод diff-фов для фиксаций слияния. Полезно для отмены подразумеваемого значения.

   --diff-merges=on, --diff-merges=m, -m

      Эта опция делает вывод diff для фиксаций слияния отображаемым в формате по умолчанию. Опция -m выдаст результат только в том случае, если также использовалась опция -p. Формат по умолчанию можно поменять с помощью параметра конфигурации log.diffMerges, у которого значение по умолчанию separate.

   --diff-merges=first-parent, --diff-merges=1

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

   --diff-merges=separate

      Это приводит к тому, что фиксации слияния показывают полную разницу по отношению к каждому из родителей. Для каждого родителя создается отдельная запись журнала и diff.

   --diff-merges=combined, --diff-merges=c, -c

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

   --diff-merges=dense-combined, --diff-merges=cc, --cc

      При использовании этой опции выходные данные, созданные --diff-merges=combined, дополнительно сжимаются путем исключения неинтересных узлов, содержимое которых в родительских элементах имеет только два варианта, и результат объединения выбирает один из них без изменения. Опция --cc подразумевает -p.

   --combined-all-paths

      Этот флаг приводит к тому, что комбинированные diff-ы (используемые для фиксаций слияния) перечисляют имя файла из всех родителей. Таким образом, он действует только тогда, когда используется --diff-merges=[dense-]combined, и вероятно, полезен только в том случае, если обнаружены изменения имени файла (то есть когда было запрошено определение переименования или копирования).

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

      Генерирует diff-ы с < n> строками контекста вместо обычного дерева. Подразумевает --patch.

   --output=< file>

      Вывод в указанный файл вместо stdout.

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

      Задает символ, используемый для индикации новых, старых или контекстных линий в генерируемом патче. Нормально они +, - и ' ' соответственно.

   --raw

      Для каждой фиксации показывает суммарные изменения с использованием формата raw diff. См. секцию "RAW OUTPUT FORMAT" git-diff(1). Это отличается от отображения самого лога в raw-формате, чего можно добиться с --format=raw.

   --patch-with-raw

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

   -t

      Показывает объекты дерева в выводе diff.

   --indent-heuristic

      Разрешает эвристику, которая сдвигает границы diff hunk, чтобы сделать патчи более удобными для чтения. Это поведение по умолчанию.

   --no-indent-heuristic

      Запрещает эвристику отступов.

   --minimal

      Тратит некоторое время, чтобы обеспечить формирование самого компактного возможного diff.

   --patience

      Генерирует diff с использованием алгоритма "терпеливого различия" (patience diff).

   --histogram

      Генерирует diff с использованием алгоритма "histogram diff".

   --anchored=< text>

      Генерирует diff с использованием алгоритма "anchored diff".

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

      Если строка существует как в источнике, так и в месте назначения, и существует только 1 раз, и начинается с этого текста, то алгоритм пытается предотвратить её появление в качестве удаления или добавления при выводе. Внутренне используется алгоритм "patience diff".

   --diff-algorithm={patience|minimal|histogram|myers}

      Выбирает алгоритм diff. Варианты следующие:

      default, myers

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

      minimal

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

      patience

         Использует алгоритм "patience diff" при генерации патчей.

      histogram

         Этот алгоритм расширяет поведение patience-алгоритма для "поддержки редко появляющихся общих элементов" (support low-occurrence common elements). Например, если вы сконфигурировали переменную diff.algorithm в значение не по умолчанию, и хотите использовать умолчание, то должны использовать опцию --diff-algorithm=default.

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

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

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

   --compact-summary

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

   --numstat

      Работает подобно --stat, но показывает количество добавленных или удаленных строк в десятичной нотации и путь (pathname) без аббревиатурного сокращения, чтобы сделать вывод более удобным для машинной обработки. Для двоичных файлов выведет два - вместо 0 0.

   --shortstat

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

   -X[< param1,param2,...>], --dirstat[=< param1,param2,...>]

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

      changes

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

      lines

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

      files

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

      cumulative

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

      < limit>

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

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

   --cumulative

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

   --dirstat-by-file[=< param1,param2>...]

      Синоним для --dirstat=files,param1,param2...

   --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, используется короткий формат. Этот формат только показывает имена фиксаций в начале и конце диапазона. Когда указано --submodule или --submodule=log, используется формат лога. Этот формат перечисляет фиксации в диапазоне наподобие сводки git-submodule(1). Когда указано --submodule=diff, используется формат diff. Этот формат показывает inline diff изменений в содержимом субмодуля между диапазоном фиксации. По умолчанию для diff.submodule или формат short, если опция конфигурации не установлена.

   --color[=< when>]

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

   --no-color

      Выключает подкрашивание diff. Делает то же самое, что и --color=never.

   --color-moved[=< mode>]

      Перемещенные строки кода подкрашиваются по-другому. Значение < mode> по умолчанию no, если опция не предоставлена, и zebra, если не указано mode. Значение mode должно быть одним из следующего:

      no

         Перемещнные строки не подсвечиваются.

      default

         Это синоним для zebra. В будущем это может быть изменено на более чувствительный режим.

      plain

         Любая строка, которая добавлена в одном месте, и удалена в другом, будет подкрашена цветом color.diff.newMoved. Подобным образом color.diff.oldMoved будет использоваться для удаленных строк, которые добавлены в другом месте в diff. Этот режим берет любую перемещенную строк, однако это не очень полезно для обзора, чтобы определить, был ли блок кода перемещен без перестановки.

      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=< modes>

      Конфигурирует, как игнорируются пробелы при выполнении детектирования перемещения для --color-moved. Эти режимы могут быть указаны как список значений, разделенных запятой:

      no

         Не игнорировать пробелы при детектировании перемещения.

      ignore-space-at-eol

         Игнорировать пробелы в конце строк (EOL).

      ignore-space-change

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

      ignore-all-space

         Игнорировать пробелы при сравнении строк. Это игнорирует различия, даже если одна строка содержит пробел, а в другой строке его нет.

      allow-indentation-change

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

   --no-color-moved-ws

      Не игнорировать пробелы при выполнении детектирования перемещения. Это может использоваться для отмены настроек конфигурации. Это то же самое, что и --color-moved-ws=no.

   --word-diff[=< mode>]

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

      color

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

      plain

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

      porcelain

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

      none

         Снова выключает diff для слов.

         Обратите внимание, что несмотря на имя первого режима, цвет используется для выделения измененных частей во всех режимах, если это разрешено.

   --word-diff-regex=< regex>

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

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

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

      Значение regex может быть также установлено через драйвер diff или опцию конфигурации, см. gitattributes(5) или git-config(1). Явное указание отменяет любой драйвер diff или настройку конфигурации. Драйверы diff отменяют настройки конфигурации.

   --color-words[=< regex>]

      Эквивалент --word-diff=color плюс (если было указано regex) --word-diff-regex=< regex>.

   --no-renames

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

   --[no-]rename-empty

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

   --check

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

   --ws-error-highlight=< kind>

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

   --full-index

      При создании выходных данных формата исправления вместо первой горстки символов показывает полные имена объектов pre- и post-image blob на строке "index", когда генерируется вывод формата patch.

   --binary

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

   --abbrev[=< n>]

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

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

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

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

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

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

      При генерации diff-ов детектирует и сообщает о переименованиях для каждой фиксации. Сведения для следующих файлов в переименованиях при просмотре истории см. в описании --follow. Если указано 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

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

      Когда используется вместе с -B, опускает также превью в части удаления пары delete/create.

   -l< num>

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

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

      Выберет только файлы, которые добавлены (Added, A), были скопированы (Copied, C), удалены (Deleted, D), изменены (Modified, M), переименованы (Renamed R), у которых поменялся тип (т. е. обычный файл, symlink, submodule, ..., T), убран из слияния (Unmerged, U), неизвестный (Unknown, X), или у которого есть испорченная пара (pairing Broken, B). Можно использовать любые комбинации из этих символов фильтра (включая none). Когда в комбинацию фильтра добавлен символ * (все или ничего, All-or-none), выбираются все пути, если в сравнении есть какой-либо файл, соответствующий другим критериям; при отсутствии файла, соответствующего другим критериям, ничего не выбирается.

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

      Обратите внимание, что не все diff-ы могут иметь все типы. Например, diff-ы от индекса к рабочему дереву никогда не могут иметь добавленных записей (потому что набор путей, включенных в diff, ограничен тем, что находится в индексе). Подобным образом скопированные или переименованные элементы не могут появиться, если запрещено детектирование для этих типов.

   -S< string>

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

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

      Также этот поиск работает и с двоичными файлами.

   -G< regex>

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

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

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

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

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

      См. элемент pickaxe в gitdiffcore(7) для дополнительной информации.

   --find-object=< object-id>

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

      Объектом может быть фиксация blob или субмодуля. Это подразумевает опцию -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>. Все файлы, имена путей которых совпадут с первым шаблоном, будут выведены первыми, все файлы, имена путей которых совпадут со вторым шаблоном (но не с первым), будут выведены следующими, и так далее. Все файлы с именами пути, которые не совпали ни с одним шаблоном, будут выведены последними, как если бы в конце был неявно указан шаблон match-all. Несколько имен путей имеют одинаковый ранг (когда они совпали с одним и тем же шаблоном, но не с более ранними шаблонами), их порядок вывода относительно друг друга будет обычный.

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

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

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

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

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

   -R

      Меняет местами два ввода; т. е. показывает различия от индекса или файла на диске до содержимого дерева.

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

      Когда запуск произошел из подкаталога проекта, может быть предложено исключить изменения вне этой директории, и с помощью этой опции показать имена путей относительно неё. Когда вы находитесь не в подкаталоге (т. е. в каталоге репозитория), вы можете указать имя подкаталога, чтобы сделать вывод относительно него путем указания < path> в качестве аргумента. Опция --no-relative может использоваться для противодействия как опции конфигурации diff.relative, так и предыдущей опции --relative.

   -a, --text

      Обрабатывать все файлы как текст.

   --ignore-cr-at-eol

      Игнорировать возврат каретки в конце строки, когда выполняется сравнение.

   --ignore-space-at-eol

      Игнорировать изменение в пробелах на конце строки (EOL).

   -b, --ignore-space-change

      Игнорировать изменения в объеме пробелов. Это игнорирует пробелы в конце строки, и рассматривает все другие последовательности одного или нескольких символов пробела как одно и то же.

   -w, --ignore-all-space

      Игнорировать пробелы при сравнении строк. Это приведет к игнорированию различий, даже если одна строка имеет пробелы, а в другой строке пробелов нет.

   --ignore-blank-lines

      Игнорировать изменения, в которых все строки пусты.

   -I< regex>, --ignore-matching-lines=< regex>

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

   --inter-hunk-context=< lines>

      Показывает контекст diff между блоками, до указанного количества строк (lines), сплавляя тем самым блоки, которые находятся близко друг к другу. По умолчанию до diff.interHunkContext или 0, если эта опция конфигурации не установлена.

   -W, --function-context

      Покажет всю функцию как строки контекста для каждого изменения. Имена функций определяются таким же способом, как git diff работает с заголовками patch hunk (см. "Defining a custom hunk-header" в 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 plumbing.

   --ignore-submodules[=< when>]

      Игнорирует изменения для субмодулей в генерации diff. Параметр < when> может быть указан "none", "untracked", "dirty" или "all" (используется по умолчанию). Использование "none" будет рассматривать субмодуль как модифицированный, когда он либо содержит не отслеживаемые, либо измененные файлы, или его HEAD отличается от фиксации, записанной в superproject, и может использоваться для отмены любых настроек опции игнорирования в git-config(1) или gitmodules(5). Когда используется "untracked", субмодули не считаются "грязными" (dirty), когда они только содержат не отслеживаемый контент (однако они все еще будут сканированы на предмет измененного контента). Использование "dirty" игнорирует все изменения в рабочем дереве субмодулей, показываются только изменения для фиксаций, сохраненных в superproject (это было поведение до версии 1.7.0). Использование "all" скрывает все изменения для субмодулей.

   --src-prefix=< prefix>

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

   --dst-prefix=< prefix>

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

   --no-prefix

      Не покажет какой-либо префикс источника или места назначения.

   --line-prefix=< prefix>

      Добавит дополнительный префикс к каждой строке вывода.

   --ita-invisible-in-index

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

Для дополнительного объяснения этих общих опций см. gitdiffcore(7).

ГЕНЕРАЦИЯ PATCH TEXT С ПОМОЩЬЮ -p

   Запуск git-diff(1), git-log(1), git-show(1), git-diff-index(1), git-diff-tree(1) или git-diff-files(1) с опцией -p создаст текст исправления (patch text). Вы можете настроит создание patch text через переменные окружения GIT_EXTERNAL_DIFF и GIT_DIFF_OPTS (см. git(1)), а также diff attribute (см. gitattributes(5)).

   То, что делает опция -p, несколько отличается от традиционного формата diff:

      1. Добавляется заголовок "git diff", выглядящий следующим образом:

               diff --git a/file1 b/file2

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

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

      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>

         Режимы файла печатаются как 6-цифровые восьмеричные числа, включая биты типа файла и разрешения доступа к нему.

         Имена путей в расширенных заголовках не включают префиксы a/ и b/.

         Индекс подобия (similarity index) это процентное значение не измененных строк, и индекс отличий (dissimilarity index) это процентное значение измененных строк. Это округляется вниз до целого значения, после чего указывается знак процента. Таким образом, значение 100% зарезервировано для двух одинаковых файлов, в то время как 100% dissimilarity означает, что ни одной строки из старого файла не было сделано в новом файле.

         Строка индекса включает имена 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. Заголовки hunk упоминают имя функции, к которой применяется hunk. См. "Defining a custom hunk-header" в gitattributes(5) для подробного описания, адаптации к определенным языкам.

КОМБИНИРОВАННЫЙ ФОРМАТ DIFF

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

   "Комбинированный diff" (combined 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>, и не используются форматом combined diff.

      3. Далее идет заголовок from-file/to-file из двух строк:

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

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

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

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

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

      4. Chunk header формат изменен, чтобы люди не смогли случайно скормить его патчу -p1. Combined diff формат был создан для обзора изменений фиксации слияния, и он не предназначен для наложения. Изменение подобно изменению в заголовке расширенного индекса (extended index header):

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

         Здесь (количество родителей + 1) символов @ в chunk для combined diff формата.

   В отличие от традиционного унифицированного формата diff, который показывает два файла 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 log --no-merges

      Показать всю историю фиксации, но пропустить любые слияния.

   git log v2.6.12.. include/scsi drivers/scsi

      Показать все фиксации начиная с версии v2.6.12, которые изменили любой файл в подкаталогах include/scsi или drivers/scsi.

   git log --since="2 weeks ago" -- gitk

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

   git log --name-status release..test

      Показать фиксации, которые в ветке "test", но не в ветке "release", вместе со списком путей каждых изменений фиксации.

   git log --follow builtin/rev-list.c

      Показать фиксации, которые поменяли builtin/rev-list.c, включая те фиксации, которые произошли до того, как файлу было присвоено его настоящее имя.

   git log --branches --not --remotes=origin

      Показать все фиксации, которые находятся в любой из локальных ветвей, но не в любой ветви удаленного репозитория (remote-tracking branches) для origin (то, что есть у вас, а у origin нет).

   git log master --not --remotes=*/master

      Показать все фиксации в локальной ветви master, но не в любой из ветвей master удаленного репозитория.

   git log -p -m --first-parent

      Показать историю включая diff-ы изменений, то только от перспективы "главной ветви", пропуская фиксации, которые поступили от слитых ветвей, и отображение полных diff-ов изменений, введенных слияниями. Это имеет смысл только при соблюдении строгой политики слияния всех тематических веток при нахождении на одной интеграционной ветви.

   git log -L '/int main/',/^}/:main.c

      Показать, как развивалась со временем функция main() в файле main.c.

   git log -3

      Ограничивает количество отображаемых фиксаций до 3.

ОБСУЖДЕНИЕ

   Git в некоторой степени не зависит от кодировки символов (character encoding agnostic).

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

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

      Обратите внимание, что Git на уровне ядра обрабатывает имена путей просто как последовательность non-NUL байт, здесь нет преобразований кодировки имен путей (за исключением Mac и Windows). Таким образом, использование non-ASCII имен файлов будет в большинстве случаев работать даже на платформах и файловых системах, которые используют традиционные расширенные кодировки ASCII (legacy extended ASCII encodings). Однако репозитории, созданные на таких системах не будут работать правильно на системах, основанных UTF-8 (т. е. Linux, Mac, Windows), и наоборот. Дополнительное многие основанные на Git утилиты просто подразумевают имена путей в кодировке UTF-8, будут сбоить при отображении других кодировок.

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

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

      1. git commit и git commit-tree выдадут предупреждение, если предоставленное сообщение фиксации (commit log message) не выглядит как нормальная строка UTF-8, за исключение случаев, когда вы явно укажете использовать legacy encoding в своем проекте. Способ указать это - установить переменную i18n.commitEncoding в файле .git/config, примерно так:

               [i18n]
                       commitEncoding = ISO-8859-1

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

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

               [i18n]
                       logOutputEncoding = ISO-8859-1

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

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

КОНФИГУРАЦИЯ

   См. git-config(1) для переменных ядра и git-diff(1) для настроек, относящихся к генерации diff.

   format.pretty

      По умолчанию используется для опции --format (см. выше раздел "Pretty Formats"). По умолчанию используется medium.

   i18n.logOutputEncoding

      Кодировка, используемая для отображения логов (см. обсуждение выше). Если установлено, то по умолчанию используется кодировка i18n.commitEncoding, иначе UTF-8.

   log.date

      Формат по умолчанию для дат, представляемых в удобном для чтения человеком формате (сравните с опцией --date). По умолчанию используется "default", что означает запись дат наподобие Sat May 8 19:35:34 2010 -0500.

      Если формат установлен в "auto:foo", и используется пейджер, то для формата даты будет использоваться формат "foo". Иначе будет использоваться "default".

   log.follow

      Если true, git log будет действовать как если была использована опция --follow, когда предоставлен одиночный путь < path>. Это имеет те же ограничения, что и --follow, т. е. не может использоваться для следования нескольким файлам, и не работает хорошо на нелинейной истории.

   log.showRoot

      Если false, то git log и связанные команды не будут рассматривать начальную фиксацию как большое событие создания. Любые корневые фиксации в выводе git log -p output будут показываться без прикрепленного diff. По умолчанию true.

   log.showSignature

      Если true, то git log и связанные команды будут действовать как если бы в них была передана опция --show-signature.

   mailmap.*

      См. git-shortlog(1).

   notes.displayRef

      Со ссылками (refs), в дополнение к установке по умолчанию через core.notesRef или GIT_NOTES_REF, для чтения заметок, когда отображаются сообщения фиксации с командами семейства log. См. git-notes(1).

      Может быть не сокращенным именем ref, или может быть указано несколько раз. Будет выдано предупреждение для refs, которые не существуют, однако glob, который не соответствует ни одной из refs, по-тихому игнорируется.

      Эта установка может быть запрещена опцией --no-notes, переназначена переменной окружения GIT_NOTES_DISPLAY_REF, а также опцией --notes=< ref>.

[Ссылки]

1. git log manual site:git-scm.com.
2Краткий справочник по Git.
3Git: просмотр истории фиксаций.

 

Добавить комментарий


Защитный код
Обновить

Top of Page