`branch.autoSetupMerge`::
	Tells `git branch`, `git switch` and `git checkout` to set up new branches
	so that linkgit:git-pull[1] will appropriately merge from the
	starting point branch. Note that even if this option is not set,
	this behavior can be chosen per-branch using the `--track`
	and `--no-track` options.  This option defaults to `true`. The valid settings
	are:
`false`;; no automatic setup is done
`true`;; automatic setup is done when the starting point is a remote-tracking branch
`always`;; automatic setup is done when the starting point is either a
	local branch or remote-tracking branch
`inherit`;; if the starting point has a tracking configuration, it is copied to the new
	branch
`simple`;; automatic setup is done only when the starting point
	is a remote-tracking branch and the new branch has the same name as the
	remote branch.

`branch.autoSetupRebase`::
	When a new branch is created with `git branch`, `git switch` or `git checkout`
	that tracks another branch, this variable tells Git to set
	up pull to rebase instead of merge (see `branch.<name>.rebase`).
	The valid settings are:
`never`;; rebase is never automatically set to true.
`local`;; rebase is set to true for tracked branches of other local branches.
`remote`;; rebase is set to true for tracked branches of remote-tracking branches.
`always`;; rebase will be set to true for all tracking branches.

+
See `branch.autoSetupMerge` for details on how to set up a branch to track another branch.
This option defaults to `never`.

`branch.sort`::
	This variable controls the sort ordering of branches when displayed by
	linkgit:git-branch[1]. Without the `--sort=<value>` option provided, the
	value of this variable will be used as the default.
	See linkgit:git-for-each-ref[1] field names for valid values.

`branch.<name>.remote`::
	When on branch _<name>_, it tells `git fetch` and `git push`
	which remote to fetch from or push to.  The remote to push to
	may be overridden with `remote.pushDefault` (for all branches).
	The remote to push to, for the current branch, may be further
	overridden by `branch.<name>.pushRemote`.  If no remote is
	configured, or if you are not on any branch and there is more than
	one remote defined in the repository, it defaults to `origin` for
	fetching and `remote.pushDefault` for pushing.
	Additionally, `.` (a period) is the current local repository
	(a dot-repository), see `branch.<name>.merge`'s final note below.

`branch.<name>.pushRemote`::
	When on branch _<name>_, it overrides `branch.<name>.remote` for
	pushing.  It also overrides `remote.pushDefault` for pushing
	from branch _<name>_.  When you pull from one place (e.g. your
	upstream) and push to another place (e.g. your own publishing
	repository), you would want to set `remote.pushDefault` to
	specify the remote to push to for all branches, and use this
	option to override it for a specific branch.

`branch.<name>.merge`::
	Defines, together with `branch.<name>.remote`, the upstream branch
	for the given branch. It tells `git fetch`/`git pull`/`git rebase` which
	branch to merge and can also affect `git push` (see `push.default`).
	When in branch _<name>_, it tells `git fetch` the default
	refspec to be marked for merging in `FETCH_HEAD`. The value is
	handled like the remote part of a refspec, and must match a
	ref which is fetched from the remote given by
	`branch.<name>.remote`.
	The merge information is used by `git pull` (which first calls
	`git fetch`) to lookup the default branch for merging. Without
	this option, `git pull` defaults to merge the first refspec fetched.
	Specify multiple values to get an octopus merge.
	If you wish to setup `git pull` so that it merges into _<name>_ from
	another branch in the local repository, you can point
	`branch.<name>.merge` to the desired branch, and use the relative path
	setting `.` (a period) for `branch.<name>.remote`.

`branch.<name>.mergeOptions`::
	Sets default options for merging into branch _<name>_. The syntax and
	supported options are the same as those of linkgit:git-merge[1], but
	option values containing whitespace characters are currently not
	supported.

`branch.<name>.rebase`::
	When true, rebase the branch _<name>_ on top of the fetched branch,
	instead of merging the default branch from the default remote when
	`git pull` is run. See `pull.rebase` for doing this in a non
	branch-specific manner.
+
When `merges` (or just `m`), pass the `--rebase-merges` option to `git rebase`
so that the local merge commits are included in the rebase (see
linkgit:git-rebase[1] for details).
+
When the value is `interactive` (or just `i`), the rebase is run in interactive
mode.
+
*NOTE*: this is a possibly dangerous operation; do *not* use
it unless you understand the implications (see linkgit:git-rebase[1]
for details).

`branch.<name>.description`::
	Branch description, can be edited with
	`git branch --edit-description`. Branch description is
	automatically added to the `format-patch` cover letter or
	`request-pull` summary.
