首页 > 解决方案 > 为什么`git show`不提供重定向标准输出的分支信息?

问题描述

以下是两个带有结果示例的命令:

$ git show

commit 6f367e05cc6457fd0c0fc59fe0476db06cffb383 (HEAD -> master, tag: v7.32, origin/master, origin/HEAD)
Merge: 94ecf1d8 f3ea52b0
Author: Pupkin <pupkin@server.com>
Date:   Fri Dec 13 12:49:12 2019 +0700

    Some commit description.

$ echo `git show`

commit 6f367e05cc6457fd0c0fc59fe0476db06cffb383 Merge: 94ecf1d8 f3ea52b0 Author: Pupkin <pupkin@server.com> Date: Fri Dec 13 12:49:12 2019 +0700 Some commit description.

重要区别:在第二个结果中没有关于分支的信息 - "(HEAD -> master, tag: v7.32, origin/master, origin/HEAD)"

我还尝试了 stdout 和 stderr 相互重定向,重定向到文件、grep 和其他一些结构。同样的结果,在控制台中显示所有内容,在其他情况下 - 没有分支信息。

为什么这样?

以及如何强制 git 返回整个消息?

标签: git

解决方案


正如上面评论中的@ElpieKay所说,我需要将密钥--decorate与命令一起使用。

Git 手册

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

打印显示的任何提交的引用名称。如果指定了short,则不会打印引用名称前缀refs/heads/、refs/tags/和refs/remotes/。如果指定了 full,则将打印完整的 ref 名称(包括前缀)。如果指定了 auto ,则如果输出将发送到终端,则显示参考名称,就好像给出了 short 一样,否则不显示参考名称。默认选项是short

但我很确定默认情况下使用手册中所说的auto代替。short

这个问题就解决了。


推荐阅读