如何通过GitHub Actions获取触发工作流的提交哈希以回滚未获批合并提交?
GitHub Actions回滚与提交哈希获取问题解答
获取触发工作流的合并提交哈希
在你基于pull_request closed事件配置的工作流里,GITHUB_SHA默认指向的是PR的头提交,而非合并到main分支的那个合并提交哈希。如果要回滚合并操作,你需要的是合并提交的哈希值,而不是PR的头提交。
你当前用git rev-parse --short "$GITHUB_SHA"只能拿到PR头提交的短哈希,没法定位到需要回滚的合并提交。更直接的方式是从GitHub事件上下文里直接取合并提交哈希:
- 用
${{ github.event.pull_request.merge_commit_sha }}就能拿到合并提交的完整哈希,不需要额外执行git命令。
如果需要短哈希,可以这么处理:
git_hash=$(echo "${{ github.event.pull_request.merge_commit_sha }}" | cut -c1-7)
另外,GITHUB_REF在pull_request事件里指向的是PR的源分支(比如refs/heads/你的PR分支名),不是目标分支main,所以git_branch=${GITHUB_REF#refs/heads/}拿到的是PR分支的名字,不是你要回滚的main分支,这点要注意。
用路径过滤筛选需处理的合并PR
要只针对包含特定路径变更的PR执行工作流,可以在on.pull_request里添加paths规则,比如只关注src/目录下的文件变更:
on: pull_request: branches: - main types: [closed] paths: - 'src/**'
这样只有当PR的变更涉及src/目录下的文件时,工作流才会在PR关闭且合并后触发。
你的命令是否足以确定回滚提交?
不够,原因有两点:
GITHUB_SHA对应的是PR的头提交,不是合并提交哈希,回滚需要的是合并到main的那个提交哈希,应该用github.event.pull_request.merge_commit_sha。GITHUB_REF拿到的是PR的源分支,不是目标分支main,对回滚main分支没有帮助。
内容的提问来源于stack exchange,提问作者harry1102
相关产品推荐
相关产品推荐

