Как настроить «git log» для отображения «даты фиксации»

Как настроить git log для отображения commit date вместо author date?


person michael    schedule 09.01.2013    source источник
comment
@Colleen С каждым коммитом связаны две даты: AuthorDate и CommitDate (git show --pretty=fuller HEAD для примера). Для локальной разработки они обычно одинаковы, но для исправлений, добавляемых по электронной почте или другими способами, они могут различаться, где AuthorDate — это дата создания исправления, а CommitDate — дата, когда оно было фактически применено к репозиторию.   -  person twalberg    schedule 09.01.2013


Ответы (4)


Существует несколько вариантов красивой печати даты. Вероятно, проще всего просто использовать один из предварительно запеченных форматов --pretty, например git log --pretty=fuller, — это покажет обе даты. Если вы хотите увидеть только одну дату, но сделать ее датой фиксации, вы можете использовать git log --format=<some stuff>. Все допустимые коды для определения формат задокументирован в git help log. Дата фиксации — одна из %cd, %cD, %cr, %ct или %ci, в зависимости от того, какой формат вы предпочитаете.

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

person twalberg    schedule 09.01.2013

Вы можете использовать --pretty=format и использовать %cr для относительной даты фиксации.

Например:

$ git log --graph --pretty=format:'%C(auto)%h%d (%cr) %cn <%ce> %s'

Вы можете определить псевдоним в git, чтобы упростить его использование. У меня есть следующее в моем .gitconfig:

[alias]
# see `git help log` for detailed help.
#   %h: abbreviated commit hash
#   %d: ref names, like the --decorate option of git-log(1)
#   %cn: commiter name
#   %ce: committer email
#   %cr: committer date, relative
#   %ci: committer date, ISO 8601-like format
#   %an: author name
#   %ae: author email
#   %ar: author date, relative
#   %ai: author date, ISO 8601-like format
#   %s: subject
# my awesome git log replacement
lol  = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s\"
# same as above, but ISO date
lold = log --graph --pretty=format:\"%C(auto)%h%d%Creset %C(cyan)(%ci)%Creset %C(green)%cn <%ce>%Creset %s\"
# using build-in standards
lol2 = log --oneline --graph --decorate
# shows branches and their last commits
lol3 = log --all --graph --decorate --oneline --simplify-by-decoration

В Linux или аналогичных системах вы можете использовать одинарные кавычки ' вместо двойных кавычек ":

[alias]
lol = log --graph --pretty=format:'%C(auto)%h%d%Creset %C(cyan)(%cr)%Creset %C(green)%cn <%ce>%Creset %s'

При этом просто запустите git lol или другие варианты, чтобы увидеть красивый результат.

Вот вывод git lol --simplify-by-decoration:

вывод git lol

  • Это выглядит хорошо. :)
  • lol is easier to type than log, and sounds better too.
    • Also gives you access to the regular git log if you ever need it.
  • Ваши глаза могут быстро сканировать содержимое по разным цветам.
  • Имена и адреса электронной почты очень полезны для крупных проектов/организаций со многими участниками.
  • Использование раскраски по умолчанию для hash/ref, так как это уже довольно хорошо.

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

введите описание изображения здесь

Edit 2020-06: добавлены скриншоты. Обновлено для использования %C(auto) (автоматическая окраска/цвет по умолчанию) для %h (хэш фиксации) и %d (имена ссылок). Добавлено %cn (имя коммитера) в дополнение к электронной почте.

person raychi    schedule 29.01.2014
comment
Я получаю сообщение об ошибке синтаксического анализа: git log --graph --pretty=format:\"%C(yellow)%h%Creset%C(cyan)%C(bold)%d%Creset %C(cyan)(%cr)%Creset %C(green)%ce%Creset %s\" bash: синтаксическая ошибка рядом с неожиданным токеном `(' - person frakman1; 31.03.2016
comment
@ frakman1 — вам нужно отменить экранирование s, чтобы приведенная выше строка запускалась в терминале. - person stites; 29.04.2016
comment
Исправленная строка: git log --graph --pretty=format:%C(yellow)%h%Creset%C(голубой)%C(жирный)%d%Creset %C(голубой)(%cr)%Creset %C (зеленый)%ce%Creset %s - person RedSands; 07.11.2016

Я предпочитаю этот формат, не включает имя автора и включает фактическую дату фиксации.

git log --graph --pretty=format:"%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset  %C(green)%Creset %s" --date=short
person Patrick Steil    schedule 04.01.2020
comment
«фактическая дата», когда автор создал первую версию этого коммита. Если с тех пор он был перебазирован или иным образом повторно зафиксирован, окончательная дата фиксации для того, что вы там видите, находится в основе формата '%c'. Параметр «--short-date» является синонимом вывода даты в формате «iso» для %ai и %ci. - person georgey; 21.07.2021

Может кому пригодится. Я искал метки даты и времени с именем автора.

введите здесь описание изображения

git log --graph --pretty=format:"%C(yellow)%h%x09%Creset%C(cyan)%C(bold)%ad%Creset %C(yellow)%cn%Creset  %C(green)%Creset %s" --date=default
person Francois    schedule 10.03.2021