【问题标题】:showing git branch name in command prompt在命令提示符下显示 git 分支名称
【发布时间】:2016-03-21 20:55:33
【问题描述】:

只是好奇以下两个是否总是输出相同的东西(分支名称)?我正在使用 zsh。

git rev-parse --abbrev-ref HEAD 2> /dev/null

ref=$($git symbolic-ref HEAD 2> /dev/null)
echo "${ref#refs/heads/}"

如果不是,那么在命令提示符下设置 git 上下文的一种方式是否优于另一种方式?

【问题讨论】:

    标签: git zsh prompt


    【解决方案1】:

    它们在分支上的行为相同,但在“分离 HEAD”模式下则不同(例如,尝试 git checkout --detach master,然后使用 git checkout master 重新连接头部)。

    真正要回答的问题是:您希望在分离的 HEAD 模式下显示什么?如果您想要一个缩写的哈希,请使用rev-parse 格式。如果您想要其他内容,请使用symbolic-ref 格式,如果symbolic-ref 出错,则可能带有附加子句以显示“分离”或其他内容。

    【讨论】:

      【解决方案2】:

      @torec 对两者之间的差异进行了很好的解释,我只是想进一步解释一下每个命令的语法。


      git rev-parse --abbrev-ref HEAD 2> /dev/null


      rev-parse

      --abbrev-ref[=(strict|loose)]
      对象名称的明确短名称。
      选项core.warnAmbiguousRefs用于选择严格的缩写模式。

      HEAD

      Read here all about HEAD (+detached HEAD) here

      那么这个命令的作用是简单地获取HEAD (rev-parse) 的 SHA-1,然后他们将其转换为 tote 分支名称 (--abbrev-ref)


      git symbolic-ref HEAD

      symbolic-ref 给定一个参数,读取给定符号 ref 所指的分支头并输出其相对于.git/ 目录的路径。

      通常你会给出HEAD 作为参数来查看你的工作树在哪个分支上

      如果您希望做一些重新分级 refs(或 refspec(

      【讨论】:

        猜你喜欢
        • 2017-07-31
        • 2010-10-23
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多