【发布时间】: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 上下文的一种方式是否优于另一种方式?
【问题讨论】:
只是好奇以下两个是否总是输出相同的东西(分支名称)?我正在使用 zsh。
git rev-parse --abbrev-ref HEAD 2> /dev/null
对
ref=$($git symbolic-ref HEAD 2> /dev/null)
echo "${ref#refs/heads/}"
如果不是,那么在命令提示符下设置 git 上下文的一种方式是否优于另一种方式?
【问题讨论】:
它们在分支上的行为相同,但在“分离 HEAD”模式下则不同(例如,尝试 git checkout --detach master,然后使用 git checkout master 重新连接头部)。
真正要回答的问题是:您希望在分离的 HEAD 模式下显示什么?如果您想要一个缩写的哈希,请使用rev-parse 格式。如果您想要其他内容,请使用symbolic-ref 格式,如果symbolic-ref 出错,则可能带有附加子句以显示“分离”或其他内容。
【讨论】:
@torec 对两者之间的差异进行了很好的解释,我只是想进一步解释一下每个命令的语法。
git rev-parse --abbrev-ref HEAD 2> /dev/null
rev-parse
--abbrev-ref[=(strict|loose)]
对象名称的明确短名称。
选项core.warnAmbiguousRefs用于选择严格的缩写模式。
HEADRead 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(
【讨论】: