我正在尝试开发一个格式字符串来传递给
例如,假设我有两个提交:
注意新的shell提示符出现在输出的最后一行,说明提交
假设
注意日志条目之间的间距。
我应该如何构造格式字符串,以便即使完整提交消息的终止不一致,间距也保持一致?
我尝试使用
我正在使用 Git 2.17.0,如果有区别请告诉我。
git log --pretty
,以便每个日志条目以完整的提交消息结尾,但是每个日志条目之间都以正好一个空行分隔。问题在于,有些完整的提交消息以换行符结尾,而有些则不是。例如,假设我有两个提交:
abc1234
和def5678
,但只有abc1234
包含完整的提交消息末尾有一个换行符。在命令行上输出原始提交内容将如下所示:[prompt]$ git cat-file commit abc1234
(...)
Title FOO
Full commit message FOO
[prompt]$ git cat-file commit def5678
(...)
Title BAR
Full commit message BAR[prompt]$
注意新的shell提示符出现在输出的最后一行,说明提交
def5678
没有在完整提交消息的结尾处包含换行符。假设
def5678
是abc1234
的父项,我想要输出一个简单的日志,每个条目仅包含短提交哈希、标题行和完整的提交消息。我可能会尝试像这样的东西:[prompt]$ git log --graph --pretty='commit %h%n%B' abc1234
* commit abc1234
| Title FOO
|
| Full commit message FOO
|
* commit def5678
| Title BAR
|
| Full commit message BAR
* commit <parent of def5678>
(...)
注意日志条目之间的间距。
abc1234
和 def5678
的条目之间由一个空行隔开(除了图形字符),但是 def5678
和其父级的条目则没有。我应该如何构造格式字符串,以便即使完整提交消息的终止不一致,间距也保持一致?
medium
、full
、fuller
和 email
的内置漂亮格式已经做到了这一点,但是我想能够构造任意格式字符串来做同样的事情。我尝试使用
%+B
、%-B
和 % B
序列(以及它们的等效项 %b
和 %n
),但似乎无法获得一致的间距。我正在使用 Git 2.17.0,如果有区别请告诉我。
git
还是通过某些替代实现(即不使用libgit2
的实现)进行提交的?如果我没记错,git
会自动修复缺少 EOL 的消息,但有些重新实现的工具则不会。 - kelvingit log --graph --pretty='commit %h%n%B%-gd%n'
命令,因为你没有使用 reflog 选择器,所以%gd
将会展开为空,并且-
会吞噬所有前面的换行符。 - jthill