当我运行时
> git log --oneline
我得到的输出看起来像这样
abcdef0 (head, branch, origin/branch) comment
0987654 different comment
1234567 (different-branch, origin/branch) third comment
但是一旦我将输出通过管道传递给任何东西(例如 > git log --oneline | cat
),分支名称就消失了
abcdef0 comment
0987654 different comment
1234567 third comment
这意味着我不能 grep、添加行号或类似的东西。
(它也缺少颜色和 less
风格的行为,但我今天不关心这两种方式)
这是我可以通过命令行参数重新启用的东西吗?
最佳答案
git log
command Git 称之为瓷器。这意味着它是供实际人类使用的,而不是像 git rev-parse
这样的其他 Git 命令。和 git for-each-ref
主要或完全用于计算机程序运行。
Porcelain 命令通常是可配置的,并且经常执行诸如颜色或分页输出之类的操作。 git log
也是如此。几个控件是 git config
条目:
color.ui = auto
log.decorate = auto
auto 设置是默认设置——您可以将其更改为always
或 never
——告诉 Git:当命令将其输出写入终端,执行此操作,但如果不执行此操作(例如在 git branch | grep ...
中写入管道时),则不要执行此操作。
log.decorate
选项控制(master)
装饰。特定文本是否着色,如果是,使用何种颜色,由相当复杂的选项迷宫控制,这些选项仅开始 color.ui
。
将 color.ui
设置为 always
将破坏在管道中运行陶瓷命令的原始脚本,并期望将 color.ui
设置为其默认自动
。 Git 自己的脚本都不是这样幼稚的,但您可能正在使用自己的扩展,或者从没有考虑过该问题的人那里获得的扩展,因此在覆盖这些默认值时要小心。
(顺便说一下,注意设置中的 =
。这些在 .git/config
和 git -c color.ui=true 中是必需的log
,例如,但在 git config log.decorate auto
中被禁止。它是历史文物和编码当时权宜之计的疯狂大杂烩。)
关于git - 为什么管道会从 git log 中删除分支名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694961/