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

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

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

当前回答

对于在脚本中使用,我建议使用以下命令:

git ls-remote --heads <repo_url> "<branch_name>" | wc -l

注意,<repo_url>可以只是一个“。”来指定本地回收(如果您在其目录结构中)、本地回收的路径或远程回收的地址。

如果<branch_name>不存在,则该命令返回0,如果存在则返回1。

其他回答

git show-branch <BRANCH-NAME> &>/dev/null && echo yes || echo no

我认为你可以在这里使用git show-branch。

$ git show-branch --list
  [master] test
* [testbranch] test
$ git show-branch testbranch
[testbranch] test
$ echo $?
0
$ git show-branch nonexistantbranch
fatal: bad sha1 reference nonexistantbranch
$ echo $?
128

所以,美元?== 0表示分支存在 你根本不需要去挖掘裁判/人头的管道。只要你不把-r传递给show-branch, 它将只在当地分支机构运作。

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

提出的另一种方法不仅将验证分支,还将验证任何具有@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 -l <branch-name>

如果分支存在,则返回分支名称;如果分支不存在,则返回none

让我们将其称为git is_localbranch(您需要在.gitconfig中添加别名)。

用法:

$ git is_localbranch BRANCH

来源:

git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
  echo "branch exists"
fi