在命令提示符

时间:2016-03-21 20:55:33

标签: git zsh prompt

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

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

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

如果没有,在命令提示符中设置git上下文是否优先于另一种方式?

2 个答案:

答案 0 :(得分:3)

它们在分支上的行为相同,但在"分离的HEAD"模式(例如,尝试git checkout master,然后rev-parse重新附加头部。)

要回答的真正问题是:您希望在分离的HEAD模式下显示什么?如果您想要缩写哈希,请使用symbolic-ref格式。如果你想要别的东西,可以使用symbolic-ref格式,也许还有一个附加条款来显示" detached"或者等等,如果{{1}}出错。

答案 1 :(得分:1)

@torec发布了对2之间差异的一个很好的解释,我只想更进一步,并解释一下每个命令的合成更多。

<强> 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

那么这个命令只是获取HEADrev-parse)的SHA-1,然后将它们转换为tote分支名称(--abbrev-ref

<强> git symbolic-ref HEAD

  

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

     

通常,您会将HEAD作为参数,以查看您的工作树所在的分支

如果你想做一些重新定义refs(或refspec(

)的东西,通常会使用(symbolic-ref)