如何包装git commit注释?


72

有没有办法包装git commit注释(通过时查看git log),这样它们就不会在行尾被截断?似乎应该有一个非常简单的解决方案,但我一直找不到。

谢谢。


2
不幸的是,这个问题似乎没有“好的”答案。
titaniumdecoy

1
本文中的解决方案对我有帮助:iamnearlythere.com/wrapping-lines-git-diff
satoru

如果您真的只想快速查看完整的评论,我认为gitk值得一提。
erictheavg

我必须提一下stopwritingramblingcommitmessages.com大宠物。工具不应该随便或让其他人创建低质量的输出。热爱您的工作并使其美丽。
Sukima

最简单的答案:-S查看git日志时使用+ Enter。我在这里的答案中的详细信息:stackoverflow.com/a/48196094/4561887
Gabriel Staples

Answers:


35

编辑2011:其他 答案(建议使用)突出显示了可以修改git的默认分页器less的选项。
我的答案末尾的言论仍然成立:即使您看到长提交消息,也不意味着其他必须处理所述(长)消息的工具也可以对其进行处理。


有关提交消息格式策略的原始答案(2010年1月):

根据此博客的介绍,由于git log不进行任何包装,因此您需要使用适当的行长来格式化注释

  • git log对提交消息不做任何特殊的特殊包装。
    使用默认的传呼机时less -S,这意味着您的段落会偏离屏幕边缘,使其难以阅读。
    在一个80列的终端上,如果我们在左边减去4列用于缩进,在右边减去4列以对称,则剩下72列。
  • git format-patch --stdout使用消息正文的消息将一系列提交转换为一系列电子邮件。
    好的电子邮件礼仪要求我们包装纯文本电子邮件,以便在80列终端中留出几层嵌套的回复指示器而不会溢出。

这里所说

通常,使用编辑器来创建提交消息,而不是在命令行中传递它们。格式应为:

  • 72个字符的硬包装
  • 提交的简短摘要
  • 后面跟一个空白行
  • 其次是支持细节

所有资源(包括GitPro书,第一行用50个字符表示,如JörgW Mittag的评论)都坚持有必要对评论进行自我包装,这当然是因为即使Git能够处理较长的行,其他工具也是如此。处理链(电子邮件,补丁程序...)可能不会。


第一行应该更像50-60:例如,它用作电子邮件的标题,在电子邮件客户端中可以以作者名作为前缀,或者在邮件列表软件中可以在列表名之前加上或带有[PATCH]或此类标记。
约尔格W¯¯米塔格

@Jörg:是的。我已经更新了答案,以提及第一行的长度。
VonC

9
这是学习Vim的又一个很好的借口。当设置为Git提交消息的编辑器时,Vim仅突出显示第一行的前50个字符,将红色标记第二行中的任何字符,并自动将第二行换成72个字符。
Mark Rushakoff 2010年


1
“ git log不做任何包装”:已过期
alexei 2012年

52

或者您可以更改您的寻呼机以使用 less -R

$ git config --global core.pager 'less -R'

这将减少停止尝试控制屏幕格式的尝试(通常,在git log使用箭头键时可以左右滚动)。而且,正如不太那么手册上所说的那样,“因此,可能会导致各种显示问题,例如长行在错误的位置被分割。” 这就是您想要的,您希望行的结尾出现在屏幕的右侧(错误的位置),而不是注释作者放置在屏幕上的位置。

还要注意,在不修改寻呼机的情况下按向右箭头键,将使您看到更多代码。这是我的首选方法。


11
+1表示“您可以使用箭头键左右滚动”-谢谢!
乔纳森·戴

1
我该如何扭转这种情况。它不完全符合我的要求。
瑞安普罗斯

3
打开您的~/.gitconfig文件并删除[core] pager = ...零件
Robert

1
此答案建议使用-R而不是-r。如果您发现git log输出中缺少一些行,请尝试一下。
克里斯·赖斯

1
less -r为我工作,less -R但不起作用(ubuntu 14.04)
肖恩

19

似乎没有完美的方法。我使用的一种解决方法是将输出通过管道传递到more(或less,或cat等):

git log | more

至少在我的系统上这样包装了长行(但是,您错过了颜色格式)。


1
用管道将其传输到catPerfecto。
克里斯·比尔

17

在前面的答案中提到的是,默认的寻呼机(通常为“少”)负责换行,并且默认情况下通常将长行斩断。

要在不更改提交消息的情况下进行修改(较少和bash示例):

$ echo $LESS
-FRSX

这是我默认情况下要覆盖LESS环境变量的内容。

echo "LESS=-FRX;export LESS" >> ~/.bash_profile
source ~/.bash_profile

7
当心!echo "LESS=-FRX;export LESS" > ~/.bash_profile将代替~/.bash_profile使用“ >>”的内容:echo "LESS=-FRX;export LESS" >> ~/.bash_profile

14

请注意,较少的-r(如上所建议)导致较少忘记其行数,并且您会错过提交,因为最上面的行将滚动到视线之外!真正的解决方案是禁用-S选项,如果未设置LESS环境变量,则默认情况下git启用-S选项。

一个好的解决方法是通过以下方式更改您的git配置:

git config --global core.pager'较少-+ S'

1
我不知道这意味着什么,但它固定我的问题在那里提交下列长的消息并没有显示出来的下一行,而是继续在同一行最后提交的(与Havok的发挥--graph(视窗)
drzaus

12

至少在git版本1.7.9.5中,git log它支持换行。从git帮助日志中:

 PRETTY FORMATS
   %w([<w>[,<i1>[,<i2>]]]): switch line wrapping

因此,例如,以下将长主题包装在72列上:

alias gl='git log --format="%C(yellow)%h %an %ad%C(reset)%n%w(72,1,2)%s"'

(同意应该遵循提交格式约定,而不要依赖于此。但是,在大家知道并尊重约定的那一天之前,这可能很有用。)


4

这对我有帮助。

git --no-pager log WhateverBranch | head -n40

通常,该分支很大,因此,将其传递到开头并使用-n开关,您可以仅获取所需的最近40行(或无论多行)的输出,并且该行应该环绕(无需滚动)。请注意,这种方法也缺少颜色格式。



2

使用这种格式使我的生活更加幸福:

log --pretty=format:\"%w(80,1,41)%h - %an, %ar : %s\"

由于我的大多数提交中,提交消息之前的输出中的字段总计约39个字符,因此使阅读变得容易得多。


1

个人建议很简单。如果您想在较少的寻呼机中看到完整的行,只需键入-S,这将变为折叠行或如果您希望以这种方式查看部分,则退回。


1

因此,我一直在寻找类似问题的解决方案,并且遇到了这个问题。就我而言,我正在运行git show,我有2行,其中的更改用一个单词表示,很长的行的结尾。最后,我使用--word-diff-regex选项以与git diff相似的方法解决了这一问题。

git show --color --word-diff-regex="[^[:space:],]+" 55de9c954d5d74a185879d3441a69cc1889c00f1 |more


1

对于那些仍在寻找答案的人,这就是我解决的打包git日志消息的方法:

git log --pretty=format:"@%H,%cn,%cD,%B" <file name> | tr "\n" " "|tr "@" "\n"

git log命令的输出通过管道传递,以查找换行符并替换为空格。这是用于将提交消息单行加入的逻辑。

在这里,我使用“ @”作为分隔符来区分提交。您可以将其替换为所需的任何特殊符号。“%H”代表提交哈希,“%cn”代表提交者名称,“%cD”代表提交日期,“%B”原始消息。如果您想了解有关pretty = format的更多信息,请查看https://git-scm.com/docs/pretty-formats

请注意,如果您在git commit消息中包含换行符,则此方法可能无效。


1

答案很简单:
键入-S然后Enter查看日志git的时候。

详细的答案:
git log使用less文本查看器输出,因此只需键入-S然后Enter在“切成长行”和“折叠长行”的两种换行模式之间切换即可。“折叠长行”选项启用自动换行。

帮助我了解这一点的资源:https : //superuser.com/a/272826/425838


0

如果nano是您的首选编辑器,则可以将git设置为使用具有自动换行功能的nano,例如72个字符:

git config --global core.editor "nano -r 72"

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.