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

基于GH Actions的Rebase与部署触发异常问题咨询

解决方案

方法1:添加工作流执行条件,仅处理分支顶端的提交

修改你的deployment.yml,在部署job中添加条件判断,仅当触发工作流的提交是当前分支的最新提交时才执行部署步骤。这样可以避免因Rebase导致的历史提交触发其他分支的工作流。

修改后的配置如下:

name: Run deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - staging
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    # 仅当触发提交是当前分支的最新提交时执行
    if: github.sha == github.event.head_commit.id
    steps:
      # 你的构建、部署步骤(保留原步骤即可)
      - name: Checkout code
        uses: actions/checkout@v4
      # 后续构建镜像、部署等步骤...

原理说明

当你将staging基于dev Rebase后推送时,staging分支的最新提交会触发工作流,此时github.sha(触发工作流的提交哈希)与github.event.head_commit.id(推送事件中分支的最新提交ID)完全一致,条件成立,部署正常执行。而dev分支的工作流若被误触发,触发的提交是dev历史中的旧提交,与dev当前的最新提交ID不匹配,条件不成立,部署步骤会被跳过。

方法2:利用并发组避免异常状态(辅助方案)

如果希望即使工作流被误触发,也不会出现状态继承等异常,可以添加concurrency配置,确保同一分支同时只运行一个工作流实例,新的实例会自动取消旧的实例。

在jobs上方添加如下配置:

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

完整配置示例:

name: Run deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - staging
      - dev

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: github.sha == github.event.head_commit.id
    steps:
      # 你的构建、部署步骤...

操作注意事项

推送Rebase后的staging分支时,建议使用git push origin staging --force-with-lease,避免强制推送覆盖他人未同步的修改,同时确保仅推送staging分支,不要误推dev分支。

内容的提问来源于stack exchange,提问作者SeekanDestroy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:53:11