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:
autosetupmerge
controls whethergit branch
andgit checkout -b
imply the--track
option, i.e. with your setting ofalways
,git checkout branchname
, ifbranchname
exists on a remote but not locally, will createbranchname
tracking its remote counterpartgit checkout -b newbranch
will create a new branchnewbranch
tracking whichever branch you had checked out before issuing this command
autosetuprebase
controls whether new branches should be set up to be rebased upongit pull
, i.e. your setting ofalways
will result in branches being set up such thatgit pull
always 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.