如何在已关闭的Pull Request中获取分支名称?GitHub Actions求助
GitHub Actions 关闭PR时获取分支名及解决拉取引用失败的问题
问题原因
- 你使用的
actions/checkout@v1在PR关闭事件中默认尝试拉取refs/pull/{PR号}/merge引用,若PR的源分支已被删除,这个引用会直接失效,导致报错。 - 原分支名提取逻辑依赖
GITHUB_REF,但PR关闭事件里的GITHUB_REF指向的是PR的临时引用(如refs/pull/1365/merge),并非实际的源分支,自然提取不到正确名称。 - 步骤变量引用完全错误:你定义的步骤ID是
extract_branch,但后续调用用了steps.branch-name.outputs.current_branch,两者完全不匹配,根本拿不到分支名参数。
解决方法
- 升级并配置checkout动作:用最新的
actions/checkout@v4,通过ref参数直接指定拉取PR的源分支,避开已失效的merge引用。 - 直接从GitHub上下文拿分支名:PR事件的上下文里自带
github.event.pull_request.head.ref,可以直接获取源分支名,不用手动提取。 - 修正变量引用错误:确保步骤ID和后续调用的变量名对应一致。
修正后的Action文件
name: Close Pull Request # 仅在PR关闭时触发 on: pull_request: types: [closed] jobs: cleanup_namespace: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 # 指定拉取PR的源分支 with: ref: ${{ github.event.pull_request.head.ref }} # 拉取完整提交历史(可选,根据脚本需求调整) fetch-depth: 0 - name: 删除命名空间 run: ./bin/delete_namespace.sh ${{ github.event.pull_request.head.ref }}
额外说明
- 如果PR的源分支已经被删除,拉取代码的步骤可能失败。若你的删除脚本不需要依赖代码,可直接跳过checkout步骤,直接执行脚本即可。
- 原配置里的两个重复Job(
merge_job和close_job)可以合并成一个,避免重复执行相同逻辑。
内容的提问来源于stack exchange,提问作者jdkealy
相关产品推荐
相关产品推荐

