我正在尝试使用分支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...
行的格式?
答案 0 :(得分:2)
为接下来的人留下答案/
@torec在评论中提到了以下内容:
git rev-list
和git 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 d1c5ae7 的 brian 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
。