Найкоротший можливий вихід із журналу git, що містить автора та дату


465

Як я можу показати вивід журналу git із (принаймні) цією інформацією:

* author
* commit date
* change

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

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


2
Можливо, вам подобається моя кольорова версія: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Відповіді:


699

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автора = дата автора (формат поважає - дата = опція)
%s= тема
Від kernel.org/pub/software/scm /git/docs/git-log.html (розділ " БЕЗПЕЧНІ ФОРМАТИ") за коментарем Vivek.


6
... а також корисно додати, date=shortяк пропонує cdunn2001, в іншій відповіді
Jesper Rønn-Jensen

10
Мій улюблений (короткий) oneliner тепер поміняти дату перед автором та використовувати коротку дату:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen

143
Приправте його кольором, а також покажіть git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
відгуки

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 郝海东 冠状 病 六四 事件 法轮功

15
Якщо вам цікаво, якими є різні параметри:% h = скорочений хеш комісії,% x09 = tab (символ для коду 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

% оголошення - дата автора, яку можна замінити --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через розділ [формат].

ОНОВЛЕННЯ 2014 року: Оскільки git зараз підтримує набивання, я вподобав поправку до версії вище:

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

Це правий вирівнювання відносних дат, а лівий вирівнює назви комітерів, тобто ви отримуєте схожий на стовпчик вигляд, легкий на очі.

Знімок екрана

  ss №1

ОНОВЛЕННЯ 2016: Оскільки підписання GPG-фіксації стає річ, я подумав, що я оновлюю цю публікацію версією, яка включає перевірку підписів (на скріншоті це пурпуровий лист відразу після фіксації). Коротке пояснення прапора:

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

Інші зміни включають:

  • кольори тепер видаляються, якщо вихід має щось інше, ніж tty (що корисно для прив’язки тощо)
  • git log -g тепер містить перемикач рефлог.
  • Збережіть 2 паролі на перейменах та поставте їх у кінці (щоб зберегти вирівнювання стовпця)
  • Обрізати відносні дати, якщо вони занадто довгі (наприклад 3 years, 4..)
  • Скорочення імен комітетів (може бути трохи коротким для деяких ppl, просто змініть %<(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


3
Можна ще більше скоротити рядки, використовуючи поштову карту . Я скоротив імена колег на своєму робочому місці до лише їхнього імені :-)
andsens

2
Відповіді у форматі --pretty є хорошими, і tigвідповідь дає інтерактивність без необхідної конфігурації, але ця є геніальною - дає запитуваний однорядковий вихід (з кольором для завантаження!) За допомогою стандартної команди 'git log'. Дуже хороший.
Brent Faust

Під час використання - вліво-вліво, я більше не отримую > <позначок. Спробував додавати %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

1
Чудово! Наступного разу я, мабуть, використовую лише% h над% H, оскільки хеш - просто дурниця для моїх людських очей :)
Jesper Rønn-Jensen

як хочеш. я наводив лише простий приклад;)
knittl

2
Класно! Мені не було відомо про --date = короткий
Jesper Rønn-Jensen

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

@Hannes, де називаються гілки?
Печер'є

@Pacerier git logзавжди показує історію поточно перевіреної гілки.
Hannes Schneidermayer

Додати, %dщоб відновити "ref імена", як (HEAD -> master).
2540625

Навіщо використовувати resetзамість auto?
2540625

49

tig - це можлива альтернатива використанню команди git log , доступної у головних відкритих джерелах * nix.

На debian або ubuntu спробуйте встановити та запустити наступним чином:

$ sudo apt-get install 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 відкриває різний вигляд.) Налаштуйте його постійно, додавши show-date = shortдо ~ / .tigrc; або в [tig]розділі в .git / configure або ~ / .gitconfig.

Щоб переглянути цілі зміни :

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

Оскільки tig відокремлений від git і, мабуть, * nix специфічний, він, ймовірно, вимагає встановити cygwin на Windows. Але для 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
Ого. цей інструмент є фантастичним і дивно швидким! brew install tig
корида

якщо ви використовуєте mac, заваріть встановити tig
Педро Брасілейро

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'

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


Так, мені це подобається!
Олексій

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

Речі постійної ширини спочатку. Найменш важлива частина - домен електронної пошти - є останньою та легкою для фільтрації.


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' в парентезі показують ГОЛОВУ, головну частину і ствол і відображаються у звичайних кольорах "-очищення"

Ось це з перервами рядків, щоб ви могли побачити, що це робить:

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 і робить набагато більше: ¶ - можливість перемикання однолінійного / багаторядкового повідомлення фіксації¶ - показ пробілів / рядків кінців рядка в режимі однолінійки. наприклад: ¶ - вкажіть діапазон через парам¶ - Виділіть проблему # 's¶ - виділіть / ^ - (Виправити | Додати | Refactor) / у повідомленнях комісій¶
Сем Хаслер

Про автоматичне надійне цитування псевдонімів див. Цю відповідь . Хочете поділитися своїм вмістом ~ 300LOC в суті?
Том Хейл

Дякую Томе! якщо я перейду до публікації цього сценарію (мені потрібно буде видалити деякі конфіденційні / конкретні компанії) речі, я надішлю вас тут.
Сем Хаслер

1

У всіх вищезгаданих пропозиціях використовується %sзаповнювач місця для теми. Я рекомендую використовувати, %Bтому що %sформатування зберігає нові рядки, а повідомлення про фіксацію декількох рядків видається стиснутим.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

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

0

Спробуйте git log --pretty = fuller, він покаже вам: - Author: Author Author Date:

Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.