有没有更好的方法来查明当地的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。