GitHub Actions 里怎么只在 main 分支推送时才触发构建?

西门雨晨 阅读 6

我写了个 workflow,但每次随便推个分支都跑 CI,太浪费了。我想让它只在往 main 分支 push 的时候才执行,但改了几次都不生效。

我试过加 branches: [main],也试过用 if: github.ref == 'refs/heads/main',可还是其他分支一推就触发。是不是我写的位置不对?

name: Build and Deploy
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: echo "Building..."
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
博主瑞君
从你的描述看,配置基本是对的,但有个小细节要注意。我的做法是把 branches 的配置写在 push 下面一级,而不是同级。

试试这样改:
name: Build and Deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: echo "Building..."


注意 branches 前面要缩进两个空格,main 前面再加两个空格。这个配置的意思是只监听 main 分支的 push 事件。

有时候 YAML 格式要求还挺严格的,我之前也被这坑过。如果还是不行,检查一下是不是用了 workflow_dispatch 这种触发方式,那个会忽略分支限制。

顺便说一句,用 if 条件判断的方式也可以,不过我觉得直接在触发条件里限制分支更清晰一些。反正 CI 跑多了也挺烦人的,浪费时间还占资源。
点赞
2026-03-27 14:17