只是好奇以下两个总是输出相同的东西(分支名称)?我正在使用zsh。
git rev-parse --abbrev-ref HEAD 2> /dev/null
与
ref=$($git symbolic-ref HEAD 2> /dev/null)
echo "${ref#refs/heads/}"
如果没有,在命令提示符中设置git上下文是否优先于另一种方式?
答案 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
那么这个命令只是获取HEAD
(rev-parse
)的SHA-1,然后将它们转换为tote分支名称(--abbrev-ref
)
<强> git symbolic-ref HEAD
强>
<强>
symbolic-ref
强> 给定一个参数,读取给定符号ref的哪个分支头指向并输出其相对于.git/
目录的路径。通常,您会将
HEAD
作为参数,以查看您的工作树所在的分支
如果你想做一些重新定义refs(或refspec(
)的东西,通常会使用(symbolic-ref)