GitHub Actions中获取已合并到master的分支仅返回master如何解决
问题原因
git branch --merged master默认仅列出本地存在的分支引用。GitHub Actions默认采用浅克隆配置,不会拉取全部分支的本地映射,就算执行了普通fetch操作,也只会拉取当前工作分支的提交,合并后已删除的远程分支不会生成本地引用,自然查询不到。tail -1取的是分支名按字母序排序的最后一条,和合并时间先后完全无关,逻辑本身就不满足需求。- 旧版的
::set-output语法已经被GitHub Actions弃用,建议改用官方推荐的写入$GITHUB_OUTPUT环境变量的方式传递输出。
解决方案
第一步:调整checkout配置
首先修改你的actions/checkout步骤,拉取完整的提交历史和全部分支引用:
- uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取所有提交历史,而非默认的浅克隆
第二步:使用正确的分支查询命令
通过查询master分支主线的最近合并提交提取源分支名称,该方式不受远程分支是否删除的影响,只要提交历史存在就能拿到结果:
适配GitHub PR合并场景(绝大多数场景适用)
GitHub通过PR合并的提交信息会固定包含源分支信息,直接提取即可:
# 提取最近合并到master的PR源分支名 merged_branch=$(git log --merges --first-parent master --pretty=format:'%s' -1 | grep -oP 'Merge pull request #[0-9]+ from \K[^ ]+') echo "branch=$merged_branch" >> $GITHUB_OUTPUT
适配本地合并推送场景
如果你是本地合并分支后直接推送到master,使用以下命令提取:
merged_branch=$(git log --merges --first-parent master --pretty=format:'%b' -1 | head -n 1 | xargs) echo "branch=$merged_branch" >> $GITHUB_OUTPUT
注意事项
如果你的仓库开启了快进合并(fast-forward merge)模式,合并分支时不会生成独立的合并提交,无法通过上述方式回溯源分支,需要在仓库的PR合并设置中改为「创建合并提交」模式即可。
内容的提问来源于stack exchange,提问作者Josh Bowden
相关产品推荐
相关产品推荐

