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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:04