表示git log online中提交消息是多行



我使用以下别名来显示git日志:

[alias]
ls = log --source --graph --pretty=format:'%C(yellow)%h %Creset[%ad] %s %C(green)[%an]%C(red)%d'

这基本上是一个修改版的git log --pretty=oneline

* b928fd3e7aef [2022-11-15] refactor: rename field of Definitions struct [Author Name] (HEAD -> master, origin/master)
* ecf0e00d0fc3 [2022-11-15] feat: deserialize definitions into a custom struct [Author Name]
* 13651af5e52f [2022-11-15] refactor: change library name [Author Name]
* 94f6694b43c2 [2022-11-15] feat: add func for making GET requests to api [Author Name]
* adf64f3dc2a2 [2022-11-15] feat: add enum for representing operation types [Author Name]
* 7df54e9305e7 [2022-11-15] feat: add struct to represent api [Author Name]
* 3bde60087494 [2022-11-14] Initial commit [Author Name]

由于日志显示在单行中,因此不清楚特定的提交消息是否跨越多行。如果某种指示符标记此提交具有多行消息,那将是完美的。我不想显示提交消息的正文。我只是想显示一个标记,如果提交消息的主体不是空的。

像这样(注意表情符号^_^在commit13651af5e52f中充当标记,它有多行提交消息):

* b928fd3e7aef [2022-11-15] refactor: rename field of Definitions struct [Author Name] (HEAD -> master, origin/master)
* ecf0e00d0fc3 [2022-11-15] feat: deserialize definitions into a custom struct [Author Name]
* 13651af5e52f [2022-11-15] refactor: change library name [Author Name] ^_^
* 94f6694b43c2 [2022-11-15] feat: add func for making GET requests to api [Author Name]
* adf64f3dc2a2 [2022-11-15] feat: add enum for representing operation types [Author Name]
* 7df54e9305e7 [2022-11-15] feat: add struct to represent api [Author Name]
* 3bde60087494 [2022-11-14] Initial commit [Author Name]

注意:通过"body"我指的是提交消息中"主题"之后的部分。

Git没有为此内置任何东西,并且不可能通过对git log的单个调用完全可靠地做到这一点,但您可以接近:使用某种标记字符,例如%x01%x00,将主题和正文以及正文结束:

git log --format="%h [%ad] %s%x01%b%x01 [%n] %d"

(为了简洁,我省略了颜色指令:根据需要添加它们)。

然后,通过查找标记来对该输出进行后处理:如果标记字符后面紧跟着第二个标记,则正文为空,因此剥离两个标记。如果在第二个标记之前,标记后面跟着文本,那就是正文:删除它和标记,并在末尾插入您的替代表情符号(或其他)。

也就是说,将git log的输出管道到您编写的小程序中,可能只是一个简单的sed或awk脚本。

如果您只想显示包含您的标记的提交,您可以通过grep管道输出,如:

git log | grep ^_^

我相信你可以修改git log的别名来搜索特定的文本,但不能立即记住语法-你也可以通过搜索正文中的反斜杠n换行字符来显示多行提交正文,而不是标记?

最新更新