为什么在使用管道时我的git log输出变得混乱?

3
如果我让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--reverse,因此我必须使用外部实用程序来反转输出结果,例如在macOS上使用gtac,这会导致我丢失分支标记,这也是我编写自己的函数而不是使用此处fcs示例的主要原因之一。)

使用哪个版本的git和操作系统?我在带有git 2.14.3的OSX上得到了非常不同的结果。 - spuder
我使用的是OS X 10.11(因为需要Karabiner),Git版本为2.16.1。 - iconoclast
1个回答

4
你特指的是(HEAD -> feature/foo)修饰符,有时会出现,有时不会出现,它能以某种神奇的方式自动检测是否通过其他程序传输了git log输出。

这些修饰符是在各种标志的控制下添加的,如 git log手册页所述:

--decorate [ =short | full | auto | no ]

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

(这里是我加粗的)。

旧版本的Git不太高级,一些旧版本的默认设置为no而不是autoshort,但是这个选项已经存在很长时间了。此外,您可以在每个用户的git config --global设置中配置自己的默认设置。您可能使用默认为auto的Git版本(这是我打赌的),或者已将设置配置为auto


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接