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

我如何用(至少)这些信息显示git日志输出:

* author
* commit date
* change

我想把它压缩到每个日志条目一行。最短的格式是什么?

(尝试了--format=oneline但是没有显示日期)

271419 次浏览
git log --pretty=format:"%H %an %ad"

使用--date=设置日期格式

git log --pretty=format:"%H %an %ad" --date=short
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 =缩写提交哈希
. %h =缩写提交哈希
. %h =缩写提交哈希 %x09 = tab(代码9的字符)
%an =作者名
%ad =作者日期(格式尊重——date= option)
%s = subject
. #

. kernel.org/pub/software/scm/git/docs/git-log.html (PRETTY FORMATS部分)由Vivek评论
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 --pretty=format:'%h %ad %s (%an)' --date=short

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

...重复上面cdunn2001的答案:我将丢失作者的e=mail,只包括作者的名字,就像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

轻拍可能是使用git日志命令的替代选项,在主要的开源*nix发行版中可用。

Debian或ubuntu上尝试按如下方式安装和运行:

$ sudo apt-get install tig

对于mac用户,brew可以拯救他们:

$ brew 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:蓝色;第二栏:绿色;第3列:默认文本颜色。最后一行,高亮显示。点击退出。


tig证明列没有粗糙的边缘是正确的,ascii制表符(%x09)不能保证这一点。

对于短日期格式命中大写D(注意:小写d打开一个差异视图。)通过在~/.tigrc中添加show-date = short来永久配置它;或在.git/configure或~/.gitconfig中的[tig]部分。

要查看全部改变:

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

由于tig与git是分开的,而且显然是*nix专用的,它可能需要cygwin才能安装在windows上。但是对于fedora,我认为安装命令是$ su(enter root password)# yum install tig。对于freebsd尝试% su(enter root password)# pkg_add -r tig


顺便说一下,tig的好处远远不止是快速查看日志: # EYZ0, # EYZ0 < / p >

我使用这两个.gitconfig设置:

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

%ad是作者日期,可以被--date或.gitconfig中[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
这当然都是彩色的,所以很容易区分对数线的各个部分。 此外,由于[format]部分,当输入git log时,它是默认的 < p > 2014更新: 由于git现在支持填充,我对上面的版本做了一个很好的修改:

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

右对齐相对日期,左对齐提交者名称,这意味着您将得到一个类似于列的外观,看起来很舒服。

截图

# EYZ0才能

2016年更新:由于GPG提交签名正在成为一件事情,我想我应该更新这篇文章,包括签名验证(在截图中,它是在提交后的洋红色字母)。对该标志的简短解释:

% G ?:显示“G”表示良好(有效)签名,“B”表示糟糕签名,“U”表示有效但未知的良好签名,“N”表示没有签名

其他变化包括:

  • 如果输出不是tty(这对grepping等很有用),颜色现在会被删除。
  • git log -g现在包含了reflog选择器。
  • 在refname上保存2个parens,并将它们放在末尾(以保持列对齐)
  • 如果相对日期太长,则截断它们(例如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截图

为了显示我已经准备好执行的提交

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

我用别名“staging”:

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

(有没有更简单的方法来避免这种情况?弄清楚需要逃脱的是什么有点棘手)

前面提到的所有建议都使用%s占位符作为主题。我建议使用%B,因为%s格式保留新行和多行提交消息显示压扁。

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

使用预定义的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'

enter image description here

在项目文件夹中运行:

$ 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

请随意使用这个:

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

注意末尾的-7,只显示最后7个条目。

看:

enter image description here

尝试git log——pretty=fuller,它会告诉你:- 作者: 作者日期: 提交: 提交日期:< / p >

希望这能有所帮助。

< p > # EYZ0
结尾的-10将显示最近10次提交

使用预定义的git别名(hs - history的缩写):

git hs

由命令创建一次:

git config --global alias.hs "log --pretty='%C(yellow)%h %C(cyan)%cd %Cblue%aN%C(auto)%d %Creset%s' --graph --date=relative --date-order"

%h =缩写提交哈希
%cd =提交日期(格式尊重--date=选项)
%aN =作者名(respect .mailmap .)
%d = ref names
%s = subject

附注:从Git v2.13.0开始,--decorate默认是启用的。

引用:

git --no-pager log --pretty=tformat:"%C(yellow)%h %C(cyan)%ad %Cblue%an%C(auto)%d %Creset%s" --graph --date=format:"%Y-%m-%d %H:%M" -25

我使用别名

alias gitlog='git --no-pager log --pretty=tformat:"%C(yellow)%h %C(cyan)%ad %Cblue%an%C(auto)%d %Creset%s" --graph --date=format:"%Y-%m-%d %H:%M" -25'

区别:我使用tformat和isodate,不带秒和时区,使用——no-page你会看到颜色

如果你想要指定文件或文件夹,只需要在结尾添加路径:

  • %ad =作者日期(格式尊重——date=option)
  • --date=raw显示从epoch (1970-01-01 00:00:00 UTC)开始的秒数,后面是一个空格,然后是时区,作为与UTC 参考的偏移量
git log -1 --pretty=format:"%ad" --date=raw path/to/your/folder

看起来这就是你想要的:

git log --pretty=" %C(reset)%ad %C(Cyan)%an: %C(reset)%s"

(个人注意,你应该总是有提交哈希..)