能否在GitHub Action工作流中检测git push --force强制推送操作?
GitHub Action识别强制推送实现方案
结论
该需求可以直接实现,不需要额外引入第三方工具。
实现方法
方法1:直接读取事件内置字段
GitHub push事件的webhook payload原生携带forced布尔字段,你可以直接在工作流中通过${{ github.event.forced }}读取:
- 字段值为
true:当前为git push -f/git push --force强制推送 - 字段值为
false:当前为普通git push操作
示例工作流配置:
name: 强制推送识别示例 on: [push] jobs: check-push-type: runs-on: ubuntu-latest steps: - name: 触发强制推送专属逻辑 if: github.event.forced == true run: echo "检测到强制推送,执行对应处理逻辑" - name: 触发普通推送专属逻辑 if: github.event.forced == false run: echo "检测到普通推送,执行对应处理逻辑"
方法2:git提交链校验(兜底方案)
如果需要自行校验推送类型避免特殊场景误差,可以通过git命令判断旧提交是否在新提交的祖先链上:
git merge-base --is-ancestor ${{ github.event.before }} ${{ github.event.after }}
如果该命令返回值不为0,说明旧HEAD不在新提交的提交链中,属于强制推送场景。
注意事项
- 新建分支、删除分支、标签推送场景下
github.event.forced固定为false,你可以通过github.event.created == false和github.event.deleted == false过滤这类场景后再做判断。 - 仓库开启强制推送签名、分支保护规则等配置不会影响以上判断逻辑的准确性。
内容的提问来源于stack exchange,提问作者Maik Lowrey
相关产品推荐
相关产品推荐

