rebase.backend::
	Default backend to use for rebasing.  Possible choices are
	'apply' or 'merge'.  In the future, if the merge backend gains
	all remaining capabilities of the apply backend, this setting
	may become unused.

rebase.stat::
	Whether to show a diffstat of what changed upstream since the last
	rebase. False by default.

rebase.autoSquash::
	If set to true, enable the `--autosquash` option of
	linkgit:git-rebase[1] by default for interactive mode.
	This can be overridden with the `--no-autosquash` option.

rebase.autoStash::
	When set to true, automatically create a temporary stash entry
	before the operation begins, and apply it after the operation
	ends.  This means that you can run rebase on a dirty worktree.
	However, use with care: the final stash application after a
	successful rebase might result in non-trivial conflicts.
	This option can be overridden by the `--no-autostash` and
	`--autostash` options of linkgit:git-rebase[1].
	Defaults to false.

rebase.updateRefs::
	If set to true enable `--update-refs` option by default.

rebase.missingCommitsCheck::
	If set to "warn", git rebase -i will print a warning if some
	commits are removed (e.g. a line was deleted), however the
	rebase will still proceed. If set to "error", it will print
	the previous warning and stop the rebase, 'git rebase
	--edit-todo' can then be used to correct the error. If set to
	"ignore", no checking is done.
	To drop a commit without warning or error, use the `drop`
	command in the todo list.
	Defaults to "ignore".

rebase.instructionFormat::
	A format string, as specified in linkgit:git-log[1], to be used for the
	todo list during an interactive rebase.  The format will
	automatically have the long commit hash prepended to the format.

rebase.abbreviateCommands::
	If set to true, `git rebase` will use abbreviated command names in the
	todo list resulting in something like this:
+
-------------------------------------------
	p deadbee The oneline of the commit
	p fa1afe1 The oneline of the next commit
	...
-------------------------------------------
+
instead of:
+
-------------------------------------------
	pick deadbee The oneline of the commit
	pick fa1afe1 The oneline of the next commit
	...
-------------------------------------------
+
Defaults to false.

rebase.rescheduleFailedExec::
	Automatically reschedule `exec` commands that failed. This only makes
	sense in interactive mode (or when an `--exec` option was provided).
	This is the same as specifying the `--reschedule-failed-exec` option.

rebase.forkPoint::
	If set to false set `--no-fork-point` option by default.

rebase.rebaseMerges::
	Whether and how to set the `--rebase-merges` option by default. Can
	be `rebase-cousins`, `no-rebase-cousins`, or a boolean. Setting to
	true or to `no-rebase-cousins` is equivalent to
	`--rebase-merges=no-rebase-cousins`, setting to `rebase-cousins` is
	equivalent to `--rebase-merges=rebase-cousins`, and setting to false is
	equivalent to `--no-rebase-merges`. Passing `--rebase-merges` on the
	command line, with or without an argument, overrides any
	`rebase.rebaseMerges` configuration.

rebase.maxLabelLength::
	When generating label names from commit subjects, truncate the names to
	this length. By default, the names are truncated to a little less than
	`NAME_MAX` (to allow e.g. `.lock` files to be written for the
	corresponding loose refs).
