git - 为什么管道会从 git log 中删除分支名称?

标签 git format git-branch git-log

当我运行时

> 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 设置是默认设置——您可以将其更改为alwaysnever——告诉 Git:当命令将其输出写入终端,执行此操作,但如果不执行此操作(例如在 git branch | grep ... 中写入管道时),则不要执行此操作。

log.decorate 选项控制(master) 装饰。特定文本是否着色,如果是,使用何种颜色,由相当复杂的选项迷宫控制,这些选项仅开始 color.ui

color.ui 设置为 always 将破坏在管道中运行陶瓷命令的原始脚本,并期望将 color.ui 设置为其默认自动。 Git 自己的脚本都不是这样幼稚的,但您可能正在使用自己的扩展,或者从没有考虑过该问题的人那里获得的扩展,因此在覆盖这些默认值时要小心。

(顺便说一下,注意设置中的 =。这些在 .git/configgit -c color.ui=true 中是必需的log,例如,但在 git config log.decorate auto 中被禁止。它是历史文物和编码当时权宜之计的疯狂大杂烩。)

关于git - 为什么管道会从 git log 中删除分支名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56694961/

相关文章:

linux - 将新创建的文件推送到 git 存储库中

git - 避免从 git 中的分支分支

python-3.x - 在 PyCharm 中重构字符串连接以格式化

IOS:NSDateFormatter 用于意大利地区格式

python-3.x - PyQt5 QCalendarWidget selectedDate 格式更改

git 切换分支而不丢弃本地更改

git - 在不丢失旧版本的情况下使用 git 推送新版本

git - 使用 SSH 连接到自己的 Web 服务器上的 Git 存储库

git - 如何删除仍然在本地显示的 "remote"分支?

git - 如何删除(或 merge )我当前所在的本地 Git 分支?