我使用以下命令查明我的存储库中是否存在带有branch-name
的本地 git分支。它是否正确?还有更好的方法吗?
请注意我在脚本中执行此操作。因此,如果可能的话,我想远离瓷器命令。
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
更新
原来有another way。谢谢@jhuynh。
git rev-parse --verify <branch-name>
# $? == 0 means local branch with name <branch-name> exists.
答案 0 :(得分:93)
当我在搜索引擎上搜索'git check if branch exists'时,这个页面是我看到的第一个页面。
我得到了我想要的东西,但我想提供一份更新的答案,因为原帖是从2011年开始的。
git rev-parse --verify <branch_name>
这与接受的答案基本相同,但您不需要输入“refs / heads /”
答案 1 :(得分:44)
据我所知,这是在脚本中执行此操作的最佳方式。我不确定还有更多要补充的内容,但也可能只有一个答案就是说“那个命令能做你想做的一切”:)
您唯一需要注意的是分支名称中可能包含令人惊讶的字符,因此您可能需要引用<branch-name>
。
答案 2 :(得分:27)
几乎就在那里。
只需省略--verify
和--quiet
,如果分支存在则获得散列,如果不存在,则获取任何内容。
将其分配给变量并检查空字符串。
exists=`git show-ref refs/heads/<branch-name>`
if [ -n "$exists" ]; then
echo 'branch exists!'
fi
答案 3 :(得分:15)
我认为你可以在这里使用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 /的管道。只要您没有将-r
传递给show-branch,它就只能在本地分支上运行。
答案 4 :(得分:11)
我推荐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
答案 5 :(得分:2)
在Windows批处理脚本上,它有点不同,
git rev-parse --verify <branch>
if %ERRORLEVEL% == 0 (
echo "Yes"
) else (
echo "No"
)
答案 6 :(得分:1)
我们称之为git is_localbranch
(您需要在.gitconfig
中添加别名)。
用法:
$ git is_localbranch BRANCH
来源:
git branch | grep -w $1 > /dev/null
if [ $? = 0 ]
then
echo "branch exists"
fi
答案 7 :(得分:1)
git show-branch <BRANCH-NAME> &>/dev/null && echo yes || echo no
答案 8 :(得分:0)
在初始问题上对“更新”的“建议编辑”进行审核的结果是“它应该写成评论或答案”,所以我在这里发布:
提议的another way不仅会验证分支,还会验证具有此类名称@jhuynh的任何引用。
git rev-parse --verify <reference-name>
# $? == 0 means reference with <reference-name> exists.
关于初始静止的'更新'的问题解释了:
让我们假设并检查'master.000'只是一个标签,这样的本地分支不存在,grep返回一个条目wchich是一个标签。如果引用存在,仍然会使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
答案 9 :(得分:0)
我想在浏览器中使用它,所以我制作了一个小应用程序,让您检查分支名称的有效性。它由git支持,所以你知道你得到了什么。
https://branch-checker.herokuapp.com/validate?branch=not//valid
答案 10 :(得分:0)
git show-ref
和git rev-parse
都不适合我的情况。
$ git --version
git version 2.21.0
$ git show-branch --list
* [master] mybranch commit
$ BRANCH_NAME=mybranch
$ git rev-parse --verify $BRANCH_NAME
fatal: Needed a single revision
$ git show-ref refs/heads/$BRANCH_NAME
<no otput>
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch not exists
我结束了这个
$ BRANCH_NAME=mybranch
$ SHOW_ALL=`git show-branch --all | grep -w $BRANCH_NAME`
$ [ $? == 0 ] && echo "$BRANCH_NAME exists" || echo "$BRANCH_NAME not exists"
mybranch exists
您也可以使用脚本文件
#!/bin/sh
BRANCH_NAME=mybranch
if grep -Fqe $BRANCH_NAME << EOF
`git show-branch --all`
EOF
then
echo "$BRANCH_NAME exists"
else
echo "$BRANCH_NAME not exists"
fi
答案 11 :(得分:0)
git rev-parse --verify <branch-name>
答案 12 :(得分:0)
我就是这样实现的,我觉得看起来更稳定
$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
答案 13 :(得分:-1)
如果你能设法包括grep。
git branch | grep -q <branch>
答案 14 :(得分:-1)
要在脚本中使用,我建议使用以下命令:
git ls-remote --heads <repo_url> "<branch_name>" | wc -l
请注意,<repo_url>
只能是&#34;。&#34;如果您在其目录结构中,指定本地存储库,本地存储库的路径或远程存储库的地址,则指定本地存储库。
如果<branch_name>
不存在,则该命令返回0(如果存在)。
答案 15 :(得分:-1)
$ git branch --list $ branch_name | grep $ branch_name 然后检查返回值是0还是1.