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

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

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

当前回答

在脚本中使用:

git show-ref -q --heads <branch-name>

当且仅当<branch-name>存在时,该函数将退出0 作为一个地方分支机构。

例子:

if git show-ref -q --heads <branch-name>; then
   echo 'Branch exists'
fi

其他回答

如果您能设法包括grep。

git branch | grep -q <branch>

这是我实现的方法,看起来更稳定

$branchExists = git ls-remote $gitUrl $gitBranch
if(!([bool]$branchExists))
{
   Write-Host "branch $branchName does not exist"  
} 
else
{
   Write-Host "branch $branchName exists"         
}

如果分支存在,则branchExist变量的内容将类似于:

hashcode of branch name         feature/my_branch

要验证远程上是否存在分支,这对我来说很好:

git branch -r | grep -qn origin/${GIT_BRANCH_NAME}$ && echo "branch exists" || echo "branch does not exists"

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

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

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

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

我认为你可以在这里使用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, 它将只在当地分支机构运作。