You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中获取Git仓库的分支名称列表?

在Shell脚本及Jenkinsfile中获取Git分支列表并检查分支存在性

获取分支列表

本地分支

要获取本地仓库的所有分支名并存储到数组,可使用格式化后的git branch命令,避免无关输出:

# 将本地分支名存入数组
local_branches=($(git branch --format='%(refname:short)'))

远程分支

Jenkins场景中通常需要检查远程仓库分支,用git branch -r获取远程分支后,通过sed去除origin/前缀:

# 获取远程分支名并处理前缀,存入数组
remote_branches=($(git branch -r --format='%(refname:short)' | sed 's/origin\///'))

检查特定分支是否存在

数组遍历判断

通过遍历分支数组,精准匹配目标分支:

target_branch="feature/new-feature"
branch_exists=false

for branch in "${remote_branches[@]}"; do
  if [ "$branch" = "$target_branch" ]; then
    branch_exists=true
    break
  fi
done

if $branch_exists; then
  echo "分支 $target_branch 已存在"
else
  echo "分支 $target_branch 不存在"
fi

grep快速匹配

用grep -q静默匹配,仅返回退出码,适合脚本内快速判断:

target_branch="dev"
# 检查远程分支是否存在
if git branch -r --format='%(refname:short)' | sed 's/origin\///' | grep -q "^$target_branch$"; then
  echo "分支 $target_branch 已存在"
else
  echo "分支 $target_branch 不存在"
fi

Jenkinsfile集成示例

在Pipeline中嵌入Shell逻辑,或用Groovy语法处理分支列表:

pipeline {
  agent any
  stages {
    stage('Verify Branch') {
      steps {
        script {
          def targetBranch = "feature/new-feature"
          // 拉取最新远程分支信息
          sh 'git fetch'
          // 获取处理后的远程分支列表
          def remoteBranches = sh(
            script: 'git branch -r --format=%(refname:short) | sed s/origin\\///',
            returnStdout: true
          ).trim().split('\n')
          
          if (remoteBranches.contains(targetBranch)) {
            echo "分支 ${targetBranch} 已存在"
          } else {
            echo "分支 ${targetBranch} 不存在"
          }
        }
      }
    }
  }
}

注意事项

  • 执行分支检查前建议先运行git fetch,确保本地同步最新远程分支信息
  • %(refname:short)是Git的格式化参数,能直接返回简洁的分支名,避免处理多余字符
  • 数组存储分支名时,若分支名包含空格(不推荐),需改用逐行读取的方式避免拆分错误

内容的提问来源于stack exchange,提问作者hs14428

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:45:51