在GitHub Actions中获取Git标签对应源分支的方法咨询
从标签触发的GitHub Actions流水线中获取源分支名称
在标签触发的流水线里,${{ github.ref_name }}只会返回标签名,要拿到标签对应提交的源分支,可以用以下两种方法:
方法一:通过GitHub API/CLI查询(推荐,覆盖所有分支情况)
利用GitHub的API可以查询包含目标提交的所有分支,步骤如下:
- 在流水线中添加权限配置,确保能读取仓库内容:
permissions: contents: read
- 获取标签对应的提交SHA,再用GitHub CLI查询关联分支:
# 获取标签指向的提交SHA COMMIT_SHA=$(git rev-parse ${{ github.ref }}) # 查询包含该提交的分支,这里取第一个匹配结果(可根据需求调整过滤规则) SOURCE_BRANCH=$(gh api repos/${{ github.repository }}/commits/$COMMIT_SHA/branches-where-head --jq '.[0].name') # 输出结果供后续步骤使用 echo "SOURCE_BRANCH=$SOURCE_BRANCH" >> $GITHUB_ENV
注:GitHub Actions环境中默认已配置
GITHUB_TOKEN,无需额外认证即可使用gh命令。
方法二:用Git命令查询本地分支(适合需要轻量操作的场景)
如果流水线拉取了完整的仓库历史,可以直接用Git命令查找包含目标提交的分支:
- 修改checkout步骤,拉取所有分支和历史:
- name: Checkout full repository uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取所有提交历史和分支
- 查询包含目标提交的分支:
# 获取标签对应的提交SHA COMMIT_SHA=$(git rev-parse ${{ github.ref }}) # 查找包含该提交的本地分支,排除当前HEAD分支,取第一个结果 SOURCE_BRANCH=$(git branch --contains $COMMIT_SHA | grep -v '*' | head -n 1 | sed 's/^ *//') # 写入环境变量 echo "SOURCE_BRANCH=$SOURCE_BRANCH" >> $GITHUB_ENV
注意事项
- 一个提交可能同时属于多个分支,上述方法默认取第一个匹配结果,你可以根据项目规则调整过滤逻辑(比如优先匹配
main/develop分支) - 如果标签打在孤立提交上(没有关联任何现有分支),两种方法都无法获取分支名,建议提前做 fallback 处理(比如默认设为
main或提示无关联分支)
内容的提问来源于stack exchange,提问作者Tony Chan
相关产品推荐
相关产品推荐

