从git rev-list格式中排除Preceding Commit>行

Bra*_*ldi 8 git

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

所以它只是输出这个:

fa73c05913292fbce940075fc8f454bad5066666 Example Commit Message
de4dbeffa249393dddebb7b13ae555cb97cad5be Another Example Commit Message
Run Code Online (Sandbox Code Playgroud)

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

例如

commit >fa73c05913292fbce940075fc8f454bad5066666
fa73c05 Example Commit Message
commit >de4dbeffa249393dddebb7b13ae555cb97cad5be
de4dbef Another Example Commit Message
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 9

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

实际上......在 Git 2.33(2021 年第 3 季度)中,“ git rev-listman学会使用选项commit <object-name>省略输出中的标题行。--no-commit-header

请参阅brian m提交的 d1c5ae7(2021 年 7 月 11 日)。卡尔森 ( bk2204) .
(由Junio C Hamano 合并 -- gitster--提交fe3fec5,2021 年 7 月 22 日)

rev-list--pretty=format :添加不带标题的选项

签字人:brian m. 卡尔森

一般来说,我们鼓励用户在编写脚本时使用管道命令,例如( man ),而不是陶瓷命令,例如( man )git rev-listgit log

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

这使得它不适合许多脚本编写需求,并迫使用户改为使用git log

虽然我们无法更改此行为以实现向后兼容性,但我们可以添加一个选项来抑制此行为,所以让我们这样做,并将其称为“ --no-commit-header”。
此外,添加相应的积极选项以将其重新打开。

请注意,此选项不会影响内置格式,只会影响自定义格式。
这与用户已有的行为完全相同git log,也是大多数用户将习惯的行为。

rev-list-options现在包含在其手册页中:

--no-commit-header

禁止在指定格式之前打印包含“commit”的标题行和对象 ID。这对内置格式没有影响;仅自定义格式受到影响。

--commit-header

覆盖之前的--no-commit-header.


Cod*_*ard 6

给下一个来的人留下答案/

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

git rev-list并且git log本质上是相同的命令

答案是使用以下格式:

# print out the log history in the desired format.
git log --pretty="format:..." <SHA-1>
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 6

不幸的是,实际上没有办法做到这一点。git rev-list这样实施的:

    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);
Run Code Online (Sandbox Code Playgroud)

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