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提交者的名字,这意味着你得到一个容易在眼睛上的列状外观。
截图
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 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列:默认文字颜色。 最后一行,突出显示。 按Q或q退出。
tig
certificate列没有边缘不齐 ,这是一个ASCII选项卡(%x09)不能保证。
对于短date格式命中大写D (注:小写字母d打开差异视图。)通过添加show-date = short
到〜/ .tigrc来永久configuration它。 或者在.git / configure或〜/ .gitconfig的[tig [tig]
部分。
要查看整个更改 :
- 按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不仅仅是快速查看日志的好处: 截图和手册
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