Кратчайший вывод из журнала git с указанием автора и даты

465

Как я могу показать вывод журнала git с (как минимум) этой информацией:

* author
* commit date
* change

Я хочу сжать до одной строки в записи журнала. Какой самый короткий формат для этого?

(пробовал, --format=onelineно это не показывает дату)

Джеспер Рённ-Йенсен
источник
2
Может быть, вам нравится моя цветная версия: stackoverflow.com/a/49534733/2292766
Ханнес Шнайдермайер,

Ответы:

700

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

сделал работу Это выводит:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Вдохновленный вопросом stackoverflow: «вывод журнала git как svn ls -v» , я обнаружил, что могу добавить именно те параметры, которые мне нужны.

Чтобы сократить дату (не показывая время) используйте --date=short

Если вам интересно, какие были разные варианты:
%h= сокращенный хэш коммита
%x09= табуляция (символ для кода 9)
%an= имя
%adавтора = дата автора (с уважением к формату --date = опция)
%s= тема
Из kernel.org/pub/software/scm /git/docs/git-log.html (раздел PRETTY FORMATS ) по комментарию Vivek.

Джеспер Рённ-Йенсен
источник
6
... и также полезно добавить, date=shortкак предлагает cdunn2001 в другом ответе
Джеспер Ренн-Йенсен
10
Мой любимый (короткий) oneliner теперь должен поменять дату перед автором и использовать короткую дату:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen
144
Приправьте это цветом, а также покажите ссылки:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan
16
Таблица столбцов фиксированной ширины:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 27 冠状 病 六四 事件 法轮功
15
На случай, если вам интересно, какие были разные варианты:% h = сокращенный хэш коммита,% x09 = табуляция (символ для кода 9),% an = имя автора,% ad = дата автора (уважение формата --date = опция), % s = тема. Из kernel.org/pub/software/scm/git/docs/git-log.html (раздел PRETTY FORMATS )
Vivek
204

Я использую эти две настройки .gitconfig:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% ad - это дата автора, которая может быть переопределена --dateили указана в разделе [log] в .gitconfig. Мне нравится относительная дата, потому что она дает немедленное ощущение, когда материал был добавлен. Вывод выглядит так:

6c3e1a2 2 hours ago you@me.com lsof is a dependency now.
0754f18 11 hours ago you@me.com Properly unmount, so detaching works.
336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails
be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago you@me.com Shorten while loops

Это все, конечно, в цвете, поэтому легко различить различные части строки журнала. Также это значение по умолчанию при наборе текста git logиз-за секции [format].

ОБНОВЛЕНИЕ 2014: Поскольку git теперь поддерживает отступы, у меня есть хорошая поправка к версии выше:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

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

Скриншот

  сс # 1

ОБНОВЛЕНИЕ 2016: Поскольку подпись коммитов GPG становится делом, я подумал, что я обновлю этот пост версией, включающей проверку подписи (на скриншоте это пурпурное письмо сразу после коммита). Краткое объяснение флага:

% G ?: показать «G» для хорошей (действительной) подписи, «B» для плохой подписи, «U» для хорошей подписи с неизвестной достоверностью и «N» для отсутствия подписи

Другие изменения включают в себя:

  • цвета теперь удаляются, если выводом является что-то отличное от tty (что полезно для поиска и т. д.)
  • git log -g теперь содержит селектор reflog.
  • Сохраните 2 парены на именах ссылок и поместите их в конец (чтобы сохранить выравнивание столбцов)
  • Сократить относительные даты, если они слишком длинные (например 3 years, 4..)
  • Усечение имен коммиттеров (может быть немного коротким для некоторых пользователей, просто измените %<(7,trunc)или проверьте функцию git .mailmap, чтобы сократить имена коммитеров)

Вот конфиг:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

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

Скриншот

Скриншот git log

andsens
источник
3
Вы можете сократить строки еще больше, используя почтовую карту . Я сократил имена коллег на своем рабочем месте до их имени :-)
andsens
2
Ответы в формате --pretty хороши, и tigответ дает интерактивность без требуемой конфигурации, но этот блестящий - он выдает запрошенный вывод в одну строку (с цветом для загрузки!) С помощью стандартной команды 'git log'. Очень хорошо.
Брент Фауст
При использовании - направо-налево, я больше не получаю > <оценки. Пробовал добавлять %mв формат, но потом >появляется каждый раз, даже для нормального git log. Любые подсказки, как сделать так, чтобы метки вели себя нормально с форматом?
Vituel
1
@AlvaroCavalcanti, конечно, нет проблем! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens
2
@ TrầnViệtHoàng --onelineэто просто псевдоним для --pretty=oneline. format.prettyэто красивый формат по умолчанию, но нет способа переопределить format.onelineafaik. То, что я сделал бы, это опустить pretty = shortlogстроку в конфигурации и затем создать псевдоним для запуска git log --pretty=shortlog.
andsens
99
git log --pretty=format:"%H %an %ad"

использовать --date=для установки формата даты

git log --pretty=format:"%H %an %ad" --date=short
knittl
источник
1
Большой! В следующий раз я, вероятно, буду использовать% h
вместо
как хотите. я привел только простой пример;)
knittl
2
Круто! Я не знал о --date = short
Джеспер Ренн-Йенсен
3
Просто добавьте это (с опозданием на 8 лет): хеш может выглядеть как чепуха, но это полезный инструмент, если вы хотите выбрать или сравнить коммиты. Часто список хэш не потому , что это имеет смысл, а потому , что он имеет использование
stevendesu
81

Не стесняйтесь использовать это:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Обратите внимание -7на в конце, чтобы показать только последние 7 записей.

Смотреть:

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

Ханнес Шнайдермайер
источник
3
--date=shortможно добавить, чтобы сделать его короче.
xuhdev
@ Ханнес, где названия филиалов?
Пейсер
@Pacerier git logвсегда показывает историю извлеченной ветки.
Ханнес Шнайдермайер
Добавить, %dчтобы восстановить "ref имена", как (HEAD -> master).
2540625
Почему использовать resetвместо auto?
2540625
49

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

На Debian или Ubuntu попробуйте установить и запустить следующим образом:

$ sudo apt-get install tig

(Tig устанавливается)

$ tig

(журнал отображается в пейджере следующим образом, хэш текущего коммита отображается внизу)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Поскольку уценка не поддерживает раскраску текста, представьте: столбец 1: синий; столбец 2: зеленый; столбец 3: цвет текста по умолчанию. Последняя строка выделена. Нажмите Q или q, чтобы выйти.


tigВыравнивает столбцы без неровных краев , что не гарантирует вкладка ascii (% x09).

Для короткого формата даты нажмите на заглавную D (примечание: строчная буква d открывает представление diff). Настройте его навсегда, добавив show-date = shortв ~ / .tigrc; или в [tig]разделе .git / configure или ~ / .gitconfig.

Чтобы увидеть все изменения :

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

Так как tig отделен от git и, по-видимому, * nix специфичен, вероятно, для установки на windows требуется cygwin. Но для Fedora я считаю , что установить команды $ su, (enter root password), # yum install tig. Для FREEBSD попытки % su, (enter root password), # pkg_add -r tig.


Кстати, Tig полезен гораздо больше, чем быстрый просмотр журнала: скриншоты и руководство

Джо Дженерик
источник
пожалуйста, приведите полный пример. Запись tigв моей консоли просто дает мне ошибку-bash: tig: command not found
Jesper Rønn-Jensen
10
Ух ты. этот инструмент фантастический и удивительно быстрый! заваривать тигра
бой быков
если вы используете Mac, установите big tig
Pedro Brasileiro
1
на Windows пользователи babun могутpact install tig
obojdi
34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

или

git log --pretty=format:'%h %ad %s | %an' --date=short  

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

Пример вывода:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac
Шон
источник
31

Используйте предопределенный псевдоним git, то есть:

$ git work

Создается один раз по команде:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

Или более цветной с графиком:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

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

MIRA
источник
Да, мне нравится этот!
Alex
8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Результат:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

Материал постоянной ширины - первый. Наименее важная часть - домен электронной почты - является последней и легко фильтруемой.

cdunn2001
источник
4

Чтобы показать коммиты, которые я поставил, которые готовы нажать, я делаю

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

Вывод выглядит примерно так:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Где первый столбец отображается желтым цветом, а 'H', 'm' и 't' в парентезе показывают ГОЛОВУ, мастер и туловище и отображаются в их обычных цветах "--decorate"

Вот оно с переносами строк, чтобы вы могли видеть, что он делает:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

Я псевдоним для «постановки» с:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(Есть ли более простой способ избежать этого? Было немного сложно понять, что нужно было убежать)

Сэм Хаслер
источник
Моя текущая версия этого скрипта ~ 300LOC и делает намного больше: option - опция для переключения сообщения oneline / многострочного коммита¶ - показать строку пробела / строка заканчивается в режиме oneline. Например: ¶ - указать диапазон через параметр¶ - Выделить проблему # 's¶ - выделить / ^ - (Fix | Add | Refactor) / в сообщениях о фиксации commit
Сэм Хаслер
Для автоматического надежного цитирования псевдонима, смотрите этот ответ . Хотите поделиться своим ~ 300LOC в суть?
Том Хейл
Спасибо, Том! если мне удастся опубликовать этот сценарий (мне нужно будет удалить некоторые конфиденциальные / специфичные для компании материалы), я вас здесь опрошу.
Сэм Хаслер
1

Все вышеупомянутые предложения используют %sзаполнитель для предмета. Я рекомендую использовать, %Bпотому что %sформатирование сохраняет новые строки, а сообщение о фиксации нескольких строк оказывается сжатым.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"
palik
источник
0

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

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

И если хотите, добавьте эту строку в ваш ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all
MUH Mobile Inc.
источник
0

Попробуйте git log --pretty = fuller, он покажет вам: - Автор: Дата автора: Фиксация: Дата фиксации:

Надеюсь это поможет.

Варун Шарма
источник