我使用以下命令来查找是否存在一个名为 branch-name
的本地 git 分支。这样做正确吗?有更好的方法吗?
请注意,我是在脚本内执行此操作。因此,如果可能的话,我想使用plumbing命令。
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
我使用以下命令来查找是否存在一个名为 branch-name
的本地 git 分支。这样做正确吗?有更好的方法吗?
请注意,我是在脚本内执行此操作。因此,如果可能的话,我想使用plumbing命令。
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
在我的情况下,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
git show-branch
输出显示你只有一个(本地)名为 master
的分支。当前提交 在 你的 master
分支上,其 提交主题 是 mybranch commit
。这并不意味着存在一个名为 mybranch
的分支。 - torekgit show-branch <BRANCH-NAME> &>/dev/null && echo yes || echo no
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
这是我的实现方式,我认为看起来更加稳定
$branchExists = git ls-remote $gitUrl $gitBranch
if(!([bool]$branchExists))
{
Write-Host "branch $branchName does not exist"
}
else
{
Write-Host "branch $branchName exists"
}
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 branch --list $branch_name | grep $branch_name
然后检查返回值是0还是1。
如果你能够包含grep。
git branch | grep -q <branch>
grep
解释为元字符。 - Peter John Acklam
git branch | grep -w <branch-name>
。虽然这是一个表面命令,但我认为未来不太可能对这种用法进行重大更改,因此这段代码仍然可用。 - UncleZeivgit rev-parse --verify <branch_name>
命令可以验证分支名称,也可以验证标签和提交哈希等其他引用。因此,如果你只对分支感兴趣,它可能不太适合你,因为它会返回误报。需要注意的是,翻译过程中不能改变原文意思。 - Paul S.git rev-parse --verify <branch-name>
(即branch-name
而不是branch_name
)? - Gautam