autosetuprebase vs autosetupmerge
GitGit Problem Overview
I was just knocking around in my global .gitconfig
file and I noticed that I've managed to end up with this:
[branch]
autosetupmerge = always
autosetuprebase = always
That seemed more than a little counterintuitive, but after doing some reading, I still have no idea whether I need both or whether it's sufficient to remove autosetupmerge
and just retain autosetuprebase
. Most projects that I'm working have a straight downstream->upstream flow, so rebasing is generally preferred when dealing with branches.
Git Solutions
Solution 1 - Git
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 commandautosetuprebase
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.
Solution 2 - Git
since this is the first hit, if you search for "autosetuprebase" with google, here an advice:
git config --global branch.autosetuprebase always
Solution 3 - Git
It's probably worth mentioning that there is a difference between autosetupmerge=always (in your config) and autosetupmerge=true (the default).
true will only setup merging for remote branches. always will include local branches as well.
You probably want true.
Solution 4 - Git
As I was looking for other possible options of "autosetuprebase" and it took some time to find them, here they are:
branch.autosetuprebase
When a new branch is created with git branch
or git checkout
that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see "branch.
- When
never
, rebase is never automatically set to true. - When
local
, rebase is set to true for tracked branches of other local branches. - When
remote
, rebase is set to true for tracked branches of remote-tracking branches. - When
always
, rebase will be set to true for all tracking branches.
Solution 5 - Git
You probably don't need to set up autosetupmerge---the default is true.