我如何用(至少)这些信息显示git日志输出:
* author
* commit date
* change
我想把它压缩到每个日志条目一行。最短的格式是什么?
(try——format=oneline,但不显示日期)
我如何用(至少)这些信息显示git日志输出:
* author
* commit date
* change
我想把它压缩到每个日志条目一行。最短的格式是什么?
(try——format=oneline,但不显示日期)
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 =缩写提交哈希 %x09 = TAB(代码9的字符) %an =作者名 %ad =作者日期(格式尊重——date= option) %s = subject 来自kernel.org/pub/software/scm/git/docs/git-log.html (PRETTY格式部分)由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
or
git log --pretty=format:'%h %ad %s | %an' --date=short
...riffing on cdunn2001's answer above: I'd lose the author's e=mail and include just the author's name, as per Jesper and knittl, but in keeping with cdunn2001's idea of maintaining output in columns of constant width for ease of reading (great idea!). In lieu of a separate left justified column for author name, however, I wrap that flag at the end of the command with a parentheses or offset it with a pipe. (Could really be any character that serves as a visual aid in reading the output...albeit might make sense to avoid back or forward slashes in order to reduce confusing the output with a directory or something.)
样例输出:
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
Tig可能是git log命令的替代品,在主要的开源*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列:默认文本颜色。最后一行,高亮显示。按Q或Q退出。
Tig对没有粗糙边缘的列进行了校正,而ASCII制表符(%x09)并不能保证这一点。
对于短日期格式,请键入大写D(注意:小写D打开diff视图)。通过在~/.tigrc中添加show-date = short来永久配置它;或者在.git/configure或~/.gitconfig的[tig]部分中。
看到整个变化:
回车。一个子窗格将在窗口的下半部分打开。 使用k, j键滚动子窗格中的更改。 同时,使用上、下键从一个提交移动到另一个提交。
由于tig与git是分开的,而且显然是*nix专用的,它可能需要cygwin才能安装在windows上。但是对于fedora,我相信安装命令是$ su,(输入root密码),# yum install tig。对于freebsd尝试% su,(输入root密码),# pkg_add -r tig。
顺便说一下,tig的好处不仅仅是快速查看日志: 截图& 手册
我使用这两个.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
当然,这都是彩色的,所以很容易区分对数线的各个部分。 此外,它是输入git log时的默认值,因为[format]部分。
2014年更新: 由于git现在支持填充,我对上面的版本做了一个很好的修改:
pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s
右对齐相对日期,左对齐提交者名称,这意味着您将得到一个类似于列的外观,看起来很舒服。
截图
2016年更新:由于GPG提交签名正在成为一件事情,我想我应该更新这篇文章,包括签名验证(在截图中,它是在提交后的洋红色字母)。对该标志的简短解释:
% G ?:显示“G”表示良好(有效)签名,“B”表示糟糕签名,“U”表示有效但未知的良好签名,“N”表示没有签名
其他变化包括:
如果输出不是tty(这对grepping等很有用),颜色现在会被删除。 Git log -g现在包含了reflog选择器。 在refname上保存2个parens,并将它们放在末尾(以保持列对齐) 如果相关日期太长,请截断它们(例如3年,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 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'
在项目文件夹中运行:
$ 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个条目。
看:
最后的-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= option) %aN =作者名(respect .mailmap) %d = ref name %s = subject
附注:从Git v2.13.0开始,——decoration默认启用。
引用:
Git - Git -log文档 Git中作者和提交者的区别? GitHub如何使用Git的作者日期和提交日期
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 Reference的偏移量
git log -1 --pretty=format:"%ad" --date=raw path/to/your/folder
看起来这就是你想要的:
git log --pretty=" %C(reset)%ad %C(Cyan)%an: %C(reset)%s"
(个人注意,你应该总是有提交哈希..)