Skip to content
Latchkey

How to Trigger a Workflow on Push to Specific Branches in GitHub Actions

A branches filter under the push event restricts the workflow to commits landing on the branches you list.

Add on.push.branches with a list of branch names or globs. A push to any other branch is ignored, so you avoid running CI on branches you do not care about.

Steps

  • Add push: under on with a branches: list.
  • List exact names (main) or globs (release/**).
  • Push a commit to a matching branch to fire the run.

Workflow

.github/workflows/ci.yml
on:
  push:
    branches:
      - main
      - 'release/**'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build

Gotchas

  • Use branches-ignore: for the inverse, but you cannot use both branches and branches-ignore in the same event.
  • Branch globs use fnmatch syntax, so ** matches across slashes but * does not.

Verify it actually works

A workflow that runs is not a workflow that works. Confirm the behaviour on a real event rather than on a manual dispatch, because trigger conditions, permissions, and context values all differ between the two.

Terminal
# 1. validate the file before pushing
docker run --rm -v "$(pwd):/repo" --workdir /repo rhysd/actionlint:latest -color

# 2. trigger the real event, not workflow_dispatch
git commit --allow-empty -m "ci: verify trigger" && git push

# 3. watch it and read the conclusion, not just the colour
gh run watch
gh run view --log-failed

What usually goes wrong first

  • The workflow file must exist on the default branch before scheduled or dispatch triggers appear at all.
  • GITHUB_TOKEN permissions default to read-only in many organisations. Declare a permissions: block listing every scope the job needs.
  • Fork pull requests get a read-only token and no access to secrets, regardless of workflow configuration.
  • actions/checkout gives you depth 1 on a detached HEAD, so anything needing history or a branch name needs fetch-depth: 0.

Frequently asked questions

How do I trigger a Workflow on Push to Specific Branches in GitHub Actions?
Add on.push.branches with a list of branch names or globs. A push to any other branch is ignored, so you avoid running CI on branches you do not care about.

Related guides

References

Run this faster and cheaper on Latchkey managed runners - self-healing included. Start free → 30-day trial · No credit card