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 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).
