为什么我的git日志输出在管道输出时会被破坏?

时间:2018-03-15 03:08:36

标签: git shell pipe

如果我让Git使用其内置的head式日志截断,我会得到我期望的结果:

$ git log --color=always --graph -5                                                                               

* 5abf1e7b0aba45e895bbe5b235f2326ad808ad30 (HEAD -> feature/blahblah, origin/feature/blahblah) blah blah last commit message
* c7b065e3d06ed8066ded283c2feec17e9f5a95d6 whitelist the new field
* 6b4332b951b2b37dec4c0fc67defb778dbdc29d7 add blah blah model
* 323c7570388f13aad8144292ebeb31187eb1c742 add blah blah to the database
* bceae36bda53b48679556eb00ee8321f1c8392e6 (origin/feature/yadayada, feature/yadayada) add blah blah to each blah blah

但如果我使用head,它会删除分支标记(我想要的!):

$  git log --color=always --graph | head -5                                                                        

* 5abf1e7b0aba45e895bbe5b235f2326ad808ad30 blah blah last commit message
* c7b065e3d06ed8066ded283c2feec17e9f5a95d6 whitelist the new field
* 6b4332b951b2b37dec4c0fc67defb778dbdc29d7 add blah blah model
* 323c7570388f13aad8144292ebeb31187eb1c742 add blah blah to the database
* bceae36bda53b48679556eb00ee8321f1c8392e6 add blah blah to each blah blah

当我将git-log的输出传输到另一个工具时,如何避免丢失这些分支标记?

(我正在尝试将输出管道输出到fzf,为了按照我想要的方式处理输出,需要将其反转,但Git不允许--graph和{{1要一起使用,所以我必须使用像--reverse这样的外部实用程序(在macOS上实际为tac)来反转输出,这会导致我丢失分支标记,这是三个主要原因之一我正在编写自己的函数,而不是使用gtac示例here。)

1 个答案:

答案 0 :(得分:3)

你具体指的是(HEAD -> feature/foo)装饰品,它们有时会出现,有时候不会,不知何故神奇地自动检测你是否通过一些管道输出git log其他计划。

这些装饰是在各种标志的控制下添加的,如the git log manual page

中所述
  

- 装饰[=短|满|自动|没有]

     
    打印出所显示的任何提交的引用名称。如果指定 short ,则引用名称前缀 refs / heads / refs / tags / refs / remotes / 不会打印。如果指定了 full ,则将打印完整的引用名称(包括前缀)。 如果 auto 被指定,那么如果输出转到终端,则ref名称显示为 short ,否则没有引用名称显示。默认选项是 short

(这里的粗体是我的。)

较早版本的Git并不那么花哨,而某些旧版本默认为no而不是autoshort,但该选项已存在很长时间。此外,您可以在每个用户git config --global设置中配置自己的默认设置。你可能有一个默认为auto的Git版本(这是我的赌注)或者已将你的设置配置为auto