我跑步时
> 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
样式行为,但我今天不在乎这两种方式)
可以通过命令行参数重新启用吗?
答案 0 :(得分:4)
git log
command是Git所说的瓷器。这意味着它应该由实际的人使用,而不是像git rev-parse
和git for-each-ref
这样的其他Git命令,这些命令主要或完全用于计算机程序的运行。 / p>
瓷器命令通常是可配置的,并且经常执行诸如着色或对输出进行分页等操作。 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
设置为其默认auto
。 Git自己的脚本都不是天真的,但是您可能使用的是自己的扩展名,或者是从不考虑该问题的人那里获得的扩展名,因此在覆盖这些默认值时要小心。
(顺便说一下,请注意设置中的=
。例如,这些在.git/config
和git -c color.ui=true log
中是必需的,但在git config log.decorate auto
中则是禁止的。疯狂的历史文物杂乱混搭,并编码当时的权宜之计。)
答案 1 :(得分:2)
首先,我也注意到在用力扑打之后缺少颜色,但是您对装饰(分支和标签名称)消失的描述很奇怪。让我们分别处理它们。
自己解决分支名称(装饰)
--decorate
是该标志,仅供一次使用。
要获得永久效果,可以在config
中进行设置log.decorate true
对于更具体的需求,请注意,您可以使用漂亮的格式使用它,并使用占位符%d
,例如:
git log -10 --pretty=format:"%C(yellow)%h %C(reset)%aN %ar %C(red)%d %C(reset)%s"
对于这样的结果
关于颜色
不,我不知道将它传递给bash时如何/为什么会断裂,我将让更多的高级用户来回答。 (正如我所说,很高兴您提出这个问题,因为我也很想知道这个问题。-编辑:谢谢torek!:-))