排除先前提交>来自git rev-list格式的行

时间:2016-04-28 23:23:10

标签: git

我正在尝试使用分支diff命令,我已经完成了所有工作...除了格式化。我可以使用--pretty=oneline来显示我想要的信息,除了它显示完整的哈希值,并且不对输出着色。

所以它只是输出这个:

fa73c05913292fbce940075fc8f454bad5066666 Example Commit Message
de4dbeffa249393dddebb7b13ae555cb97cad5be Another Example Commit Message

如果我尝试执行自定义格式字符串,例如:--pretty="format:%C(yellow)%h%C(reset) %s",它可以正常工作,但它上面还会显示一条额外的行。

E.g。

commit >fa73c05913292fbce940075fc8f454bad5066666
fa73c05 Example Commit Message
commit >de4dbeffa249393dddebb7b13ae555cb97cad5be
de4dbef Another Example Commit Message

有没有办法让git rev-list输出没有前面commit >abcdef3...行的格式?

4 个答案:

答案 0 :(得分:2)

为接下来的人留下答案/

@torec在评论中提到了以下内容:

  

git rev-listgit log基本上是相同的命令

答案是使用以下格式:

# print out the log history in the desired format.
git log --pretty="format:..." <SHA-1>

答案 1 :(得分:2)

不幸的是,实际上没有办法做到这一点。 git rev-list已实现thusly

    if (revs->abbrev_commit && revs->abbrev)
        fputs(find_unique_abbrev(&commit->object.oid, revs->abbrev),
              stdout);
    else
        fputs(oid_to_hex(&commit->object.oid), stdout);

因此,无论您使用什么选项,git rev-list都将始终打印某种提交哈希。

答案 2 :(得分:0)

您可以在git rev-list之后使用sed删除以commit开头的所有行。

git rev-list --pretty=format:"%C(yellow)%h%C(reset) %s" | sed '/^commit/d'

答案 3 :(得分:0)

<块引用>

如果我尝试执行自定义格式字符串,例如:--pretty="format:%C(yellow)%h%C(reset) %s",它可以工作,但它还会在其上方显示额外的一行。

实际上...在 Git 2.33(2021 年第三季度)中,“git rev-list(man) 学会了省略{{1 }} 带有 commit <object-name> 选项的输出标题行。

请参阅 commit d1c5ae7brian m. carlson (bk2204)(2021 年 7 月 11 日)。
(2021 年 7 月 22 日于 Junio C Hamano -- gitster --commit fe3fec5 合并)

<块引用>

rev-list:为--no-commit-header添加选项没有标题

签字人:brian m.卡尔森

<块引用>

一般来说,我们鼓励用户使用管道命令,如 git rev-list(man),而不是瓷器命令,如 git log({ {3}}),在编写脚本时。

然而,--pretty=format 有一个明显的问题,在某些情况下无法使用它:当 git rev-list 与自定义格式一起使用时,它总是打印出一行包含“commit”和对象身份证。

这使得它不适合许多脚本需求,并迫使用户改用 --pretty

虽然我们不能为了向后兼容而改变这种行为,但我们可以添加一个选项来抑制这种行为,所以让我们这样做,并称之为“git log”。
此外,添加相应的肯定选项以将其重新打开。

请注意,此选项不会影响内置格式,只会影响自定义格式。
这与用户在 --no-commit-header 中已有的行为完全相同,并且大多数用户都会习惯这种行为。

git log 现在包含在其 man 中:

<块引用>

rev-list-options

抑制包含“commit”的标题行和之前打印的对象ID 指定的格式。这对内置格式没有影响;只有定制 格式受到影响。

--no-commit-header

覆盖之前的 --commit-header