如何仅使用第一行输出git log?


330

我正在尝试自定义格式git log。我希望所有提交都显示在一行中。每行仅应显示提交消息的第一行。
发现git log --pretty=short应该做的伎俩,但我的电脑上显示完整的日志中git log做(除了时间戳)。

此外,我尝试使用手册页中定义占位符。但是,我找不到缩短日志消息的命令。我尝试了这一行git log --pretty=format:'%h : %s',该行在一行中显示了短哈希%h和完整消息%s

git version 1.7.3.1.msysgit.0在Vista上使用。


也许与我编写提交消息的方式有关。这是一个例子:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

因此,在给出示例的情况下,我只想输出Added some functionality.经过缩短的哈希值开头的内容。


1
%s是主题,不是完整的消息。
Josh Lee 2010年

很难说出您真正想要的是什么。该short格式是不是都在同一行,但(惊喜!)oneline是。如果oneline%h : %s是不是你想要的,这有什么错呢?特别%s是主题,即提交消息的第一行。确实应该是简化版本。您是否可能已经用一条长行提交了该消息,并以自动换行的方式查看了它们?
卡斯卡贝尔

你完全明白 问题是,oneline并且%s至少在我的计算机上没有输出我们期望的结果。我用提交消息的示例更新了帖子。也许有帮助。
JJD 2010年

Answers:


544

你有试过吗?

git log --pretty=oneline --abbrev-commit

问题可能是您缺少第一行之后的空行。上面的命令通常对我有用,但是我只是在没有空第二行的提交上进行了测试。我得到的结果与您相同:整条消息都在一行上。

空第二行是git commit消息中的标准。您看到的行为可能是故意实现的。

提交消息的第一行是简短描述。如果不能在一行中使用它,则可以使用多个,但是git会将第一个空行之前的所有内容视为“简短说明”。oneline打印整个简短描述,所以您的所有3行。


谢谢!您解决了这个谜团:在我的提交消息的第一行之后,我没有空行可以将主题与其余部分分开。不过,如果我可以随意放入或保留它,那就太好了。
JJD

1
没问题。实际上,您可以随意使用空行。如果您忽略了整个消息,那么它将变成短消息。我喜欢这个简短描述/详细描述,并且我想将简短描述限制为一行是一个问题,因此需要空行。您始终可以将的输出通过管道git log传递到过滤脚本,但是我确实主张用空行写一个简短的描述。
Gauthier 2010年

89
还有git log --oneline --oneline是一个内置的简写“--pretty = ONELINE --abbrev提交”一起使用。
杰里米·洛根

如何摆脱前缀缩短的主题标签?并不是说它不是很漂亮。但是没有cut。那将是awk病房...(顺便说一句数学问题:在存储级别上,正确编码的霍夫曼序列中下一位打开或关闭的几率是多少?提示:=== 50%。)
Phlip

7
就是那个。哦,我的页面也充满了,所以我自然地添加了%for '%s'。C-;
Phlip 2014年

158

git log --oneline想做什么?


1
我不希望将整个提交消息合并到一行中。我只想查看每个提交消息的第一行。
JJD

41

通过创建别名,更好更容易的 git log 。对于一个会话,只需将以下代码粘贴到终端一次即可。将代码粘贴到zshrc或bash配置文件以使其持久。

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

输出量

git lg

输出更改的行

git lg -p

或者(推荐)
将此代码粘贴到全局.gitconfig文件中

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

进一步阅读。
https://coderwall.com/p/euwpig/a-better-git-log
高级阅读。
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/


该示例很好地演示了漂亮的格式,但是“下面的代码仅粘贴到终端一次”似乎是错误的,因为它不会为“ git lg”创建别名
Drone2537

请注意,如果您批量执行此命令,请用%%替换%,用'“替换'。结果= git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1。您也可以将-p传递到此bat文件以获取更改的行
Dheeraj Bhaskar


25

您可以定义一个全局别名,以便您可以更方便地调用简短日志:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

然后,您可以使用调用它git slog(如果启用了它,甚至可以与自动补全功能一起使用)。



-8

如果您希望始终git log以这种方式使用,则可以通过以下方式添加git别名:

git config --global alias.log log --oneline

之后git log将打印通常会打印的内容git log --oneline


12
这实际上是行不通的,因为(A. git别名不能覆盖内置命令名称)和(B.需要在双引号周围"log --oneline")。
Max Nanasy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.