The problem
If you use git flow you may want to have a different build configuration (e.g. deploying to a different environment) in a feature branch. Changing appveyor.yml in a feature branch becomes an issue when you merge it into master overriding appveyor.yml and breaking master builds.
The solution
To solve this problem AppVeyor allows having multiple per-branch configurations in a single appveyor.yml.
Multiple configurations are defined as a list with branches section in every item that:
# configuration for "master" branch
# build in Release mode and deploy to Azure
-
  branches:
    only:
      - master
  configuration: Release
  deploy:
    provider: AzureCS
    ...
# configuration for all branches starting from "dev-"
# build in Debug mode and deploy locally for testing
-
  branches:
    only:
      - /dev-.*/
  configuration: Debug
  deploy:
    provider: Local
    ...
# "fall back" configuration for all other branches
# no "branches" section defined
# do not deploy at all
-
  configuration: Debug
Unlike white- and blacklisting branches section here works like a selector, not a filter. Configuration selection algorithm is the following:
- Check configurations with 
branches/onlysection defined. If branch is found in configuration’sonlysection use this configuration. - Check configurations with 
branches/exceptsection defined. If branch is NOT found in configuration’sexceptsection use this configuration. - Check configurations without 
branchessection. If such configuration is found use it. - If all previous steps fail, the build is not run.
 
Enjoy!