使用漂亮的格式字符串

时间:2016-04-19 14:49:57

标签: git git-log

Git log documentation说:

  

如果提交是合并,并且如果漂亮格式不是oneline,email或raw,则会在Author:行之前插入一行。这一行以"合并开始:"并且印有祖先提交的sha1,用空格分隔。

在我的git全局配置中使用format.pretty购买我,并且我没有看到"合并行"。

我可以使用git-log documentation中显示的%p(或%P)参数来模拟它:

  

%P:父哈希

     

%p:缩写为父哈希

但是这显示了一个空的"合并:"如果提交不是合并提交,则换行。

有没有办法在使用漂亮的格式字符串时模拟有关合并提交父项的标准日志行为?

1 个答案:

答案 0 :(得分:1)

不幸的是,不,目前没有办法做到这一点。问题是,当且仅当这是合并提交时,您必须包括%p%P,但是没有“测试某些条件,执行基于结果的格式指令”格式指令。 (我们得到的最接近的是%<%>等指令。)

有一种方法可以解决这个问题,但速度很慢:使用git rev-list获取所需的提交ID,然后使用git log -1git log --no-walk一次登录一个。这样,您可以在调用git log之前运行您喜欢的任何代码,例如测试“这是一个合并提交”。如果是合并提交,请将所需的指令添加到格式中,如果不是,请将其保留。例如:

git rev-list HEAD | while read hash; do
    if is-merge $hash; then fmt="... %p ..."; else fmt="... ..."; fi
    git log --no-walk --format="$fmt" $hash
done

其中is-merge检查父计数。 (要更有效地执行此操作,请使用git rev-list --parents并将read命令更改为read hash parentsread hash parent1 rest,之后您可以测试$parents或{{1}如果你用bash编写,你可以使用数组。)