GitHub Actions: how to target all branches EXCEPT master?

Update:
There is a newer filter described in Samy’s answer that provides a more succinct way of achieving this.


The documentation has been updated with more information now:

When you specify a branches or tags filter, the workflow only runs if at least one pattern matches. Any changes to branches or tags that don’t match a defined pattern will not trigger a workflow. The order that you define patterns matters:

  • A matching negative pattern after a positive match will exclude the
    ref again.
  • A matching positive pattern after a negative match will
    include the ref again.

So in order to exclude master, you need to ensure that a pattern matching everything is included first:

on:
  push:
    branches:    
      - '*'         # matches every branch that doesn't contain a "https://stackoverflow.com/"
      - '*/*'       # matches every branch containing a single "https://stackoverflow.com/"
      - '**'        # matches every branch
      - '!master'   # excludes master

Leave a Comment