如何使用git命令检测分支是否存在?

4
如何使用git命令检测分支是否存在?
需要在某些shell脚本中实现此功能。

尝试运行以下命令,它将显示所有文件的分支。ls .git/refs/heads/。您可以将find与其结合使用,以检查文件是否存在,例如:find .git/refs/heads/ -type f - h0lyalg0rithm
注意:您可以使用 git branch --list 命令获取本地分支列表。 - Paul
1个回答

14

要检查Shell变量$REVISION中的字符串是否正确地解析为Git数据库中的有效对象,您可以使用以下命令:

git rev-parse --quiet --verify $REVISION
如果找到版本,它将把SHA1打印到stdout并返回非零退出状态,否则您可以在if语句中使用它。
if git rev-parse --quiet --verify $REVISION > /dev/null; then
    # whatever
fi
请注意,这不仅允许严格意义上的分支名称,而且还允许所有有效的修订引用。

谢谢这个。我正在寻找一个快速的解决方案,用于发布过程中,并发现上述解决方案并不完全符合我的期望。在安静模式下,无论分支是否存在,返回值都为1。没有--quiet时,当分支不存在时返回128和“致命”消息,并返回1和SHA1。我可能会在没有--quiet的情况下使用它,并将输出丢弃。 - Sue Spence
1
@SueSpence 这很奇怪。如果给定的版本号有效,该命令对我来说会以零退出代码退出,只有在版本号无效时才会出错。我在编写这个答案时进行了测试,现在我又测试了一遍。文档也是这样说明的。很难说为什么它对你不起作用。 - Sven Marnach
我在macOS上手动尝试了这个命令,并在之后检查了$?。我多次复制它(或者我认为是这样)。今天,到目前为止还没有看到那种行为。稍后我会编辑我的原始评论。 - Sue Spence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接