git日志中包含作者和日期的最短输出


Answers:


698

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 log output like svn ls -v”,我发现我可以添加所需的确切参数。

要缩短日期(不显示时间),请使用 --date=short

如果您好奇什么是不同的选项,请执行以下操作:
%h=缩写提交哈希
%x09=制表符(代码9的字符)
%an=作者名称
%ad=作者日期(格式方面--date =选项)
%s=主题
来自kernel.org/pub/software/scm /git/docs/git-log.html(详细格式部分),作者为Vivek的评论。


6
...并且date=short像cdunn2001建议的那样在另一个答案中添加也很有用
JesperRønn-Jensen2012年

10
我最喜欢的(短)oneliner现在是在作者之前交换日期并使用短日期:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
JesperRønn-Jensen2012年

143
用颜色加香料并显示参考:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan 2012年

16
固定宽度列的表:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
西罗桑蒂利郝海东冠状病六四事件法轮功

15
如果您想知道不同的选项是什么,请执行以下操作:%h =缩写提交哈希,%x09 =制表符(代码9的字符),%an =作者名称,%ad =作者日期(格式方面--date =选项), %s =主题。从kernel.org/pub/software/scm/git/docs/git-log.html(“详细格式”部分)
Vivek

204

我使用以下两个.gitconfig设置:

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

%ad是作者日期,可以由.gitconfig --date中的[log]节中指定的选项或由其覆盖。我喜欢相对日期,因为它可以让您立即感觉到什么东西被放入。输出看起来像这样:

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

右对齐相对日期,左对齐提交者名称,这意味着您会看到一列像列的外观,看起来很容易。

屏幕截图

  ss#1

2016年更新:由于GPG提交签名已成为一件事情,我想我将使用包含签名验证的版本来更新此帖子(在屏幕截图中,提交之后就是洋红色字母)。标记的简短说明:

%G ?:显示“ G”表示有效的(有效)签名,“ B”表示不良的签名,“ U”表示有效的签名(有效性未知),“ N”表示无签名

其他更改包括:

  • 如果输出是除tty以外的东西(这对grepping等很有用),则现在将删除颜色。
  • git log -g 现在包含reflog选择器。
  • 在引用名称上保存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

所有列的对齐方式现在都得到了更好的保留,但以牺牲一些(希望是)无用的字符为代价。如果您有任何改进,请随时进行编辑,我希望使消息的颜色取决于是否已签署提交,但是atm似乎不太可能。

屏幕截图

git log的屏幕截图


3
您可以使用mailmap进一步缩短行。我将工作场所中同事的名字缩写为仅名字:-)
andsens

2
--pretty格式的答案很好,tig答案不需要任何配置即可提供交互性,但这很出色-它使用标准的“ git log”命令提供了要求的单行输出(带有颜色可以启动!)。非常好。
布伦特·浮士德

使用--right-left时,我不再有> <标记了。尝试添加%m格式,但>每次都会出现,即使是正常的git log。有什么线索如何使标记在格式上正常运行?
Vituel


2
@TrầnViệtHoàng --oneline只是的别名--pretty=onelineformat.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,因为哈希对于我的眼睛来说是胡说八道:)
JesperRønn-Jensen09年

如你所愿。我只举了一个简单的例子;)
knittl

2
凉!我不知道--date = short
JesperRønn-Jensen09年

3
只是将它扔在那里(晚了8年):哈希看起来像是胡说八道,但是如果您想选择或比较提交,它是一个有用的工具。通常,您列出哈希不是因为它有意义,而是因为它具有使用
stevendesu

80

随意使用这个:

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

@Pacerier git log始终显示当前已签出分支的历史记录。
Hannes Schneidermayer

添加%d以恢复“引用名称”,例如(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%)

由于markdown不支持文本着色,请想象:第1列:蓝色;第2栏:绿色;第3栏:默认文字颜色。最后一行,突出显示。按Qq退出。


tig对齐不具有参差不齐的边缘的列,ascii选项卡(%x09)无法保证。

对于短日期格式命中资本d(注:小写d打开一个diff图。),将其配置永久加入show-date = short到〜/ .tigrc; 或[tig].git / configure或〜/ .gitconfig中的部分。

要查看整个更改

  • 点击Enter。子窗格将在窗口的下半部分打开。
  • 使用kj键在子窗格中滚动更改。
  • 同时,使用键在提交之间进行切换。

由于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
JesperRønn-Jensen2012年

10
哇。这个工具很棒,而且速度惊人!酿造安装tig
斗牛

如果您使用Mac,则请执行brew install 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


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”显示HEAD,master和trunk,并以其通常的“-装饰”颜色显示

这是换行符,因此您可以看到它在做什么:

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}'

我已经别名为“ staged”:

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,它还有很多其他功能:¶-切换单行/多行提交消息的选项¶-显示行空白/行以单行模式结束。如:¶ -通过指定范围param¶ -突出问题#'s¶ -高亮/ ^ - (修复|收藏|重构)/在提交messages¶
山姆·哈斯勒

有关自动健壮别名的引用,请参见此答案。愿意分享您的〜300LOC吗?
汤姆·黑尔

谢谢汤姆!如果我打算发布该脚本(我需要删除一些机密/公司特定的内容),请在这里ping您。
山姆·哈斯勒

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,它将显示:-作者:作者日期:提交:提交日期:

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.