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

Jes*_*sen 417 git formatting logging

如何显示(至少)此信息的git日志输出:

* author
* commit date
* change
Run Code Online (Sandbox Code Playgroud)

我希望每个日志条目压缩到一行.什么是最短的格式?

(试过--format=oneline但没有显示日期)

Jes*_*sen 627

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
Run Code Online (Sandbox Code Playgroud)

stackoverflow问题启发:"git log输出像svn ls -v",我发现我可以添加我需要的确切参数.

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

如果你很好奇不同的选项是什么:
%h=缩写提交hash
%x09= tab(代码9的字符)
%an=作者姓名
%ad=作者日期(格式尊重 - 日期=选项)
%s=主题
来自kernel.org/pub/software/scm /git/docs/git-log.html(PRETTY FORMATS部分)评论Vivek.

  • 用颜色调味并显示参考:`git log --pretty = format:'%C(黄色)%h%Cred%ad%Cblue%an%Cgreen%d%Creset%s' - 日期=短 (133认同)
  • 固定宽度列表:`别名glop ="git log --pretty = format:'%C(黄色)%h |%Cred%ad |%Cblue%an |%Cgreen%d%Creset%s' - 日期=短|列-ts'|' | less -r"` (15认同)
  • 如果你好奇不同的选项是什么:%h =缩写提交哈希,%x09 =选项卡(代码9的字符),%an =作者姓名,%ad =作者日期(格式尊重 - 日期=选项), %s =主题.来自https://www.kernel.org/pub/software/scm/git/docs/git-log.html(PRETTY FORMATS部分) (14认同)
  • 我最喜欢的(短)oneliner现在是在作者之前交换日期并使用短日期:`git log --pretty = format:"%h%ad%x09%an%x09%s"--date = short` (8认同)
  • ...在另一个答案中添加像'cdunn2001建议的'date = short`也很有用 (5认同)
  • 使用别名@MuhammadUmer (2认同)
  • 对 YYYY-MM-DD 日期使用 `--date=iso`;“--date=relative” 表示“5 天前”日期。 (2认同)
  • 如果您想要可比较的日期,请添加 `--date=format-local:%Y.%m.%d-%H:%M:%S`。由于提交者名称可能包含空格,因此将日期放在前面会更方便:`--pretty=format:"%h%x09%ad%x09%an%x09%s"` (2认同)

and*_*ens 189

我使用这两个.gitconfig设置:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset
Run Code Online (Sandbox Code Playgroud)

%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
Run Code Online (Sandbox Code Playgroud)

这当然都是彩色的,因此很容易区分原木线的各个部分.git log由于[format]部分,它在键入时也是默认值.

2014更新:由于git现在支持填充,我对上面的版本有一个很好的修改:

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

这个右对齐相对日期和左对齐提交者名称,这意味着你得到一个容易在眼睛上的列状外观.

截图

  SS#1

2016更新:由于GPG提交签名正在成为一件事,我想我会用包含签名验证的版本更新这篇文章(在截图中它是提交后的洋红色字母).标志的简短说明:

%G?:显示好的(有效)签名"G",坏签名显示"B",有效期未知的好签名"U"和无签名"N"

其他变化包括:

  • 如果输出是tty以外的其他东西(这对于grepping等有用),现在会删除颜色
  • git log -g 现在包含reflog选择器.
  • 在refnames上保存2个parens并将它们放在最后(以保持列对齐)
  • 如果它们太长则截断相对日期(例如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
Run Code Online (Sandbox Code Playgroud)

总而言之,列对齐现在保留得更好,但牺牲了一些(希望)无用的字符.如果你有任何改进,请随意编辑,我喜欢使消息颜色取决于提交是否已签名,但似乎不可能是atm.

截图

git log的屏幕截图

  • 您可以使用[mailmap](https://www.kernel.org/pub/software/scm/git/docs/git-shortlog.html#_mapping_authors)进一步缩短行.我将我工作场所的同事姓名缩写为他们的名字:-) (2认同)
  • --pretty格式的答案很好,而且`tig`答案提供了没有必要配置的交互性,但是这个很棒 - 它使用标准的'git log提供所请求的单行输出(带颜色来启动!) '命令.非常好. (2认同)
  • @TrầnViệtHoàng`--online`只是`--pretty = oneline`的别名.`format.pretty`是默认的漂亮格式,但没有办法覆盖`format.oneline` afaik.我要做的是在配置中省略`pretty = shortlog`行,然后为运行`git log --pretty = shortlog`创建一个别名. (2认同)

kni*_*ttl 94

git log --pretty=format:"%H %an %ad"
Run Code Online (Sandbox Code Playgroud)

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

git log --pretty=format:"%H %an %ad" --date=short
Run Code Online (Sandbox Code Playgroud)

  • 凉!我不知道--date = short (2认同)
  • 只是将它扔在那里(晚了8年):散列看起来像是胡说八道,但是如果您想选择或比较提交,它是一个有用的工具。通常,您列出哈希不是因为它具有含义,而是因为它具有“使用” ** (2认同)

Han*_*yer 55

随意使用这个:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s"
Run Code Online (Sandbox Code Playgroud)

看:

看

  • 可以添加 `--date=short` 以使其更短。 (5认同)

Joe*_*ric 48

tig是使用主要开源*nix发行版上提供的git log命令的可能替代方法.

debian或ubuntu上尝试安装和运行如下:

$ sudo apt-get install tig
Run Code Online (Sandbox Code Playgroud)

(tig安装)

$ tig
Run Code Online (Sandbox Code Playgroud)

(日志在寻呼机中显示如下,当前提交的散列显示在底部)

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%)
Run Code Online (Sandbox Code Playgroud)

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


tig证明没有参差不齐边缘的列,ascii选项卡(%x09)不保证.

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

要查看整个更改:

  • 回车.子窗格将在窗口的下半部分打开.
  • 使用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比快速查看日志更有用: 截图手册

  • 哇.这个工具太棒了,而且速度惊人!brew安装tig (10认同)

Wen*_* Du 43

在此处输入图片说明 -10在年底是显示最后10个提交。

使用预定义的 git 别名(hs- 历史的简称):

git hs
Run Code Online (Sandbox Code Playgroud)

通过命令创建一次:

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"
Run Code Online (Sandbox Code Playgroud)

%h= 缩写提交哈希
%cd= 提交者日期(尊重--date=选项,因此您可以根据需要进行调整
%aN= 作者姓名(尊重.mailmap
%d= 参考名称
%s= 主题

PS 从 Git v2.13.0 开始,--decorate默认启用。

参考:

  • 这太有帮助了!谢谢!我喜欢这个调整: `git log --pretty='%C(cyan)%ad %C(yellow)%h %C(cyan)%d %Creset%s' --date-order --graph --date =iso` (3认同)
  • 我也喜欢 `git log --pretty='%C(cyan)%ad %C(yellow)%h %C(cyan)%d %Creset%s %C(red)%aN' --date-order - -graph --date=iso` 当我关心作者姓名时。 (3认同)

Sea*_*ean 33

git log --pretty=format:'%h %ad %s (%an)' --date=short  
Run Code Online (Sandbox Code Playgroud)

要么

git log --pretty=format:'%h %ad %s | %an' --date=short  
Run Code Online (Sandbox Code Playgroud)

...关于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
Run Code Online (Sandbox Code Playgroud)


Mír*_*íra 27

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

$ git work
Run Code Online (Sandbox Code Playgroud)

按命令创建一次:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


cdu*_*001 8

git log --pretty=format:'%h %ad  %s%x09%ae' --date=short
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

恒定宽度的东西是第一位的.最不重要的部分 - 电子邮件域 - 是最后且易于过滤的.