我正在使用下面的命令来查找在我的存储库中是否存在一个带有branch-name的本地git分支。这对吗?有没有更好的办法?

请注意,我是在脚本中执行此操作的。因此,如果可能的话,我希望使用管道命令。

git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists. 

当前回答

git branch --list $branch_name | grep $branch_name

然后检查返回值是0还是1。

其他回答

差不多了。

只要忽略verify和quiet如果分支存在,你就得到哈希值如果分支不存在,你就什么都得不到。

将其赋值给一个变量并检查是否为空字符串。

exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
    echo 'branch exists!'
fi

当我在搜索引擎上搜索“git检查分支是否存在”时,这个页面是我看到的第一个页面。

我得到了我想要的,但我想提供一个更新的答案,因为最初的帖子是2011年的。

git rev-parse --verify <branch_name>

这本质上与接受的答案相同,但您不需要键入“refs/heads/<branch_name>”

从shell脚本来看,这将是

if [ `git rev-parse --verify main 2>/dev/null` ]
then
   ...
fi

我对最初问题“更新”的“建议编辑”的审查结果是“它应该作为评论或答案写出来”,所以我把它贴在这里:

提出的另一种方法不仅将验证分支,还将验证任何具有@jhuynh这样名称的引用。

git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.

关于初始问题的“更新”问题解释如下:

让我们假设并检查master。000'只是一个标记,这样的本地分支不存在,grep返回一个标记条目。如果引用存在,仍然rev-parse将返回0,即使这样的本地分支不存在。正如@paul-s所提到的,这是一个错误的匹配

$ git show-ref |grep master.000

f0686b8c16401be87e72f9466083d29295b86f4a refs/tags/master.000
$ git rev-parse --verify master.000
f0686b8c16401be87e72f9466083d29295b86f4a
$ echo $?
0
git branch --list $branch_name | grep $branch_name

然后检查返回值是0还是1。

据我所知,这是在脚本中实现它的最佳方式。我不确定是否有更多的补充,但可能有一个答案只是说“这个命令做你想要的一切”:)

唯一需要注意的是分支名称中可能有令人惊讶的字符,因此可能需要引用<branch-name>。