What is counterintuitive here is the naming of these preferences. They do look like they refer to the same functionality, but in fact they don’t:
autosetupmergecontrols whethergit branchandgit checkout -bimply the--trackoption, i.e. with your setting ofalways,git checkout branchname, ifbranchnameexists on a remote but not locally, will createbranchnametracking its remote counterpartgit checkout -b newbranchwill create a new branchnewbranchtracking whichever branch you had checked out before issuing this command
autosetuprebasecontrols whether new branches should be set up to be rebased upongit pull, i.e. your setting ofalwayswill result in branches being set up such thatgit pullalways performs a rebase, not a merge. (Be aware that existing branches retain their configuration when you change this option.)
So it makes perfect sense to have both autosetupmerge = always and autosetuprebase = always; in fact, that’s also what I have.