有没有更好的方法来查明当地的git分支是否存在?

我正在使用下面的命令来找出在我的仓库中是否存在一个branch-name本地 git分支。 它是否正确? 有没有更好的办法?

请注意,我正在脚本内部执行此操作。 出于这个原因,如果可能的话,我想远离瓷器的命令。

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

更新

原来还有另一种方法 。 谢谢@ jhuynh 。

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

据我所知,这是用脚本来做的最好方法。 我不确定还有更多要补充的,但也可能有一个答案,只是说:“这个命令做你想要的一切”:)

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

当我在search引擎上search'git check branch if exists'时,这个页面是我看到的第一个。

我得到我想要的,但是我想提供一个更新的答案,因为原来的post是从2011年开始的。

 git rev-parse --verify <branch_name> 

这与接受的答案基本相同,但是您不需要input“refs / heads /”

差不多了。

只需要省略--verify--quiet ,如果分支存在,你可以得到散列,如果不存在,也可以不分散。

将其分配给一个variables并检查一个空string。

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

我想你可以在这里使用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表示分支存在,你不必深入到refs / heads /的pipe道。 只要你不通过-r显示分支,它只会在本地分支上运行。

我build议git show-ref --quiet refs/heads/$name

  • --quiet意味着没有输出,这是很好的,因为那样你可以干净地检查退出状态。

  • refs/heads/$name限制到本地分支和匹配全名(否则dev将匹配develop

脚本中的用法:

 if git show-ref --quiet refs/heads/develop; then echo develop branch exists fi 

我们称之为git is_localbranch (您需要在.gitconfig添加别名)。

用法:

 $ git is_localbranch BRANCH 

资源:

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

在Windows批处理脚本是有点不同,

 git rev-parse --verify <branch> if %ERRORLEVEL% == 0 ( echo "Yes" ) else ( echo "No" ) 

在我的“build议编辑”到最初的问题上的“更新”的审查结果是“它应该被写为评论或答案”,所以我在这里发布:

提出的另一种方法不仅要validation分支机构,而且还要提及这个名字@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支持的,所以你知道你得到了什么。

https://branch-checker.herokuapp.com/validate?branch=not//valid

如果你可以设法包括grep。

 git branch | grep -q <branch> 

为了在脚本中使用,我推荐以下命令:

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

请注意, <repo_url>只能是“。” 指定本地回购,如果你是在其目录结构,本地回购的path,或远程回购的地址。

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

$ git branch –list $ branch_name | grep $ branch_name然后检查返回值是0还是1。