git log中包含作者和date的最短输出

我怎样才能显示(至less)这个信息的git日志输出:

* author * commit date * change 

我希望它压缩到每个日志条目一行。 那最简单的格式是什么?

(尝试 – --format=oneline但不显示date)

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不显示时间? 更新:是的,如下例“knittl”所示:use --date=short

我使用这两个.gitconfig设置:

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

%ad是作者date,可以通过--date或在--date中的[log]节中指定的选项来覆盖。 我喜欢这个相对的date,因为它能立即感觉到什么东西被sorting。 输出如下所示:

 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 

这当然是彩色的,所以很容易区分一个日志行的各个部分。 当inputgit log时也是默认的,因为[format]部分。

2014年更新:由于git现在支持填充我有一个很好的修正以上版本:

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

这个权利alignment相对date和左alignment提交者的名字,这意味着你得到一个容易在眼睛上的列状外观。

截图

SS#1

2016更新:由于GPG提交签名正在成为一件事情,我想我会更新这个职位与包括签名validation的版本(在截图中,它是提交后的品红字母)。 国旗的简短解释:

%G?表示一个好的(有效的)签名的“G”,一个不好的签名显示“B”,一个有效性未知的好的签名显示“U”,没有签名的显示为“N”

其他变化包括:

  • 如果输出是tty以外的东西(这对grepping等有用),颜色现在被移除。
  • git log -g现在包含reflogselect器。
  • 在refnames上保存2个parens,并把它们放在最后(以保持列alignment)
  • 截断相对date,如果他们太长(例如3 years, 4..
  • 截断提交者的名字(可能对于一些ppl有点短,只要改变%<(7,trunc)或者检查git .mailmap特性来缩短提交者的名字)

这是configuration:

 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 

总而言之,所有的列alignment方式现在都以牺牲一些(希望)无用的字符为代价而得到了更好的保存。 随意编辑,如果你有任何改进,我很想让消息的颜色取决于提交是否签名,但似乎并不是可能的atm。

截图

git日志的屏幕截图

 git log --pretty=format:"%H %an %ad" 

使用--date=来设置date格式

 git log --pretty=format:"%H %an %ad" --date=short 

tig是使用主要的开源* nix发行版中可用的git log命令的一种可能的替代方法。

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列:默认文字颜色。 最后一行,突出显示。 按Qq退出。


tigcertificate列没有边缘不齐 ,这是一个ASCII选项卡(%x09)不能保证。

对于短date格式命中大写D (注:小写字母d打开差异视图。)通过添加show-date = short到〜/ .tigrc来永久configuration它。 或者在.git / configure或〜/ .gitconfig的[tig [tig]部分。

要查看整个更改

  • 按Enter键 。 子窗格将在窗口的下半部分打开。
  • 使用kj键在子窗格中滚动更改。
  • 同时,使用向上向下键从提交移动到提交。

由于tig与git是分开的,而且显然是* nix特定的,所以可能需要在Windows上安装cygwin。 但是对于Fedora,我相信安装命令是$ su (enter root password)# yum install tig 。 对于freebsd试试% su(enter root password)# pkg_add -r tig


顺便说一句,tig不仅仅是快速查看日志的好处: 截图和手册

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

要么

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

……对于上面的cdunn2001的回答,我会丢掉作者的电子邮件,只包括作者的姓名,按照Jesper和knittl,但是要符合cdunn2001的想法,即以恒定宽度的列保持输出,以便读取好想法!)。 然而,代替作者姓名的单独左alignment列,我用圆括号将该标志包裹在命令的末尾,或用pipe道将其偏移。 (实际上可以是任何在读取输出时用作视觉辅助的字符,尽pipe为了避免将输出与目录或其他东西混淆,避免后退或前进斜线是有意义的。)

示例输出:

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

等宽的东西是第一位的。 最不重要的部分 – 电子邮件域 – 是最后一个,也很容易过滤。

为了显示我已经准备推出的提交,我做了

 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 

如果第一列出现黄色,并且parentesis中的“H”,“m”和“t”显示HEAD,主人和树干,并以通常的“ – 装饰”颜色显示

这里是换行符,所以你可以看到它在做什么:

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

(有没有一种更容易的方法来逃避呢?找出需要转义的东西有点棘手)

使用预定义的git别名,即:

 $ git work 

一次创build命令:

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

在这里输入图像说明

以上所有build议均使用%s占位符作为主题。 我会推荐使用%B因为%s格式保留了新的行,并且多行提交信息显示被压扁。

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

在项目文件夹中运行这个:

 $ 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