Отображение коммитов#
В этом уроке мы научимся оформлять вывод команды git log в удобном для нас восприятия формате.
А именно:
выбирать один из вариантов отображения (опции
--oneline,--formatсо значениямиshort,full,oneline, …);настраивать собственный формат отображения (опция
--format="форматная строка");включать дополнительную информацию о коммите (опции
--patchи--stat);выводить относительные даты (опция
--relative-date).
Существуют различные стандартные варианты отображения коммита на экране.
Опция --format=type выбирает один из таких вариантов.
Здесь type имеет одно из следующих значений: oneline, short, full, fuller, reference, email, raw, medium.
По умолчанию, Git использует medium.
Формат, заданный опцией--format=oneline, как вытекает из названия, выводит сообщение о коммите одной строкой.
Строка состоит из идентификатора и заголовка описания:
0d933fc0d9bb7bdaed1997c0ae06567115242f74 Ninja: Update showIncludes prefix detection for clang-cl 18
Компактный однострочный вывод за счет усечения до 10 цифр идентификатора дает опция --oneline:
0d933fc0d9 Ninja: Update showIncludes prefix detection for clang-cl 18
Похожее однострочное представление выводит формат --format=reference.
Оно используется для человекочитаемой ссылки к описаниям других коммитов.
Ссылка состоит из укороченного до 10 цифр идентификатора и заключенных в круглые скобки заголовка сообщения и даты.
0d933fc0d9 (Ninja: Update showIncludes prefix detection for clang-cl 18, 2024-02-06)
Остальные предопределенные форматы (short, full, fuller, email, raw, medium) многострочные.
Формат --format=short расширяет предыдущий вывод информацией об авторе коммита: его имени и электронной почте.
Уже информация не помещается в одну строчку и каждое поле помещается в отдельную строку.
commit 0d933fc0d9bb7bdaed1997c0ae06567115242f74
Author: Martin Storsjö <martin@martin.st>
Ninja: Update showIncludes prefix detection for clang-cl 18
Формат medium добавляет к формату short дату и время создания коммита, а описание коммита содержит уже дополнительно к заголовку тело.
Данный формат git log выбирает по умолчанию.
Формат full убирает из формата medium запись о дате и времени и добавляет информацию о коммитере.
Формат fuller к формату full добавляет авторскую и коммитерскую дату и время.
Формат email подготавливает описание коммита к отправке по почте из командной строки.
From 0d933fc0d9bb7bdaed1997c0ae06567115242f74 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
Date: Tue, 6 Feb 2024 23:58:44 +0200
Subject: [PATCH] Ninja: Update showIncludes prefix detection for clang-cl 18
Since commit LLVM/Clang commit `5523fefb01c2` ([clang][lex] Use
preferred path separator in includer-relative lookup, 2023-09-08), part
of the upcoming 18.x release, the output format of the showIncludes flag
has changed, where it now prints paths with double backslashes:
Note: including file: .\\foo.h
Previously, we expected to see the path name in the form "./foo.h".
Extend the regex to match a path name starting with `.\`, in addition to
the existing matched patterns.
Формат raw выводит описание коммита во внутреннем представлении.
Здесь видим, что появился поле parent – указатель на родительский коммит.
Поле tree – это внутренний объект Git, который содержит изменения.
commit 0d933fc0d9bb7bdaed1997c0ae06567115242f74
tree a35cd4850c3d520af1a3b21d626a1a576a640327
parent a88acb0a419d184102c65ee9456950f2cea1cc71
author Martin Storsjö <martin@martin.st> 1707256724 +0200
committer Brad King <brad.king@kitware.com> 1707316694 -0500
Ninja: Update showIncludes prefix detection for clang-cl 18
Since commit LLVM/Clang commit `5523fefb01c2` ([clang][lex] Use
preferred path separator in includer-relative lookup, 2023-09-08), part
of the upcoming 18.x release, the output format of the showIncludes flag
has changed, where it now prints paths with double backslashes:
Note: including file: .\\foo.h
Previously, we expected to see the path name in the form "./foo.h".
Extend the regex to match a path name starting with `.\`, in addition to
the existing matched patterns.
Опция --format дополнительно предлагает возможность задания собственного формата вывода:
git log --format=format:"строка формата"
Строка формата содержит символы:
заменителя, замещаемых полями коммита при выводе;
управления цветом;
управления положением курсора;
Вот некоторые из заменителей:
Заменители |
Описание |
|---|---|
%H |
хеш коммита |
%h |
сокращенный хеш коммита |
%an |
имя автора |
%ae |
электронная почта автора |
%ad |
дата создания коммита автором |
%s |
заголовок описания |
%b |
тело описания |
Введем собственный компактный формат отображения, где в одной строке указаны имя автора и сообщение, разделенные символами ==>.
Применим команду к хранилищу проекта json от пользователя nlohmann.
skt@home:~/projects/json$ git log --format=format:"%an ==> %s"
Raphael Grimm ==> Prevent memory leak when exception is thrown in adl_serializer::to_json (#3901)
dependabot[bot] ==> ⬆️ Bump future from 0.18.2 to 0.18.3 in /docs/mkdocs (#3934)
Joyce ==> Refactor amalgamation workflow to avoid dangerous use of pull_request_target (#3969)
Sergei Trofimovich ==> custom allocators: define missing 'rebind' type (#3895)
theevilone45 ==> Fix typo in test.cmake (#3951)
Arsen Arsenović ==> tests/unit-iterators2: use std::ranges::equals for range comparisons (#3950)
haadfida ==> removed lgtm badge and added Cirrus CI badge (#3937)
Florian Segginger ==> Change 2022 to 2023 (#3932)
Raphael Grimm ==> Fix CI issues (#3906)
Finkman ==> PrettyPrinter: Check if match is valid before accessing group (#3920)
Niels Lohmann ==> Try old MinGW script (#3892)
:
Опция --stat выводит статистику по коммиту.
В нее входят список затронутых файлов и количества добавленных и удаленных строк.
В конце суммарная информация показывает количество затронутых файлов, добавленных и удаленных строк.
Опция --patch дополнительно к описанию коммита покажет изменения в diff-формате.
Опция --relative-date отобразит дату и время в относительно текущего момента:
10 секунд назад;
73 секунды назад;
2 минуты назад;
2 часа назад;
24 часа назад;
2 дня назад;
5 дней назад;
9 недель назад
2 месяца назад;
1 год, 5 месяцев назад;
2 года назад;