push.autoSetupRemote::
	If set to "true" assume `--set-upstream` on default push when no
	upstream tracking exists for the current branch; this option
	takes effect with push.default options 'simple', 'upstream',
	and 'current'. It is useful if by default you want new branches
	to be pushed to the default remote (like the behavior of
	'push.default=current') and you also want the upstream tracking
	to be set. Workflows most likely to benefit from this option are
	'simple' central workflows where all branches are expected to
	have the same name on the remote.

push.default::
	Defines the action `git push` should take if no refspec is
	given (whether from the command-line, config, or elsewhere).
	Different values are well-suited for
	specific workflows; for instance, in a purely central workflow
	(i.e. the fetch source is equal to the push destination),
	`upstream` is probably what you want.  Possible values are:
+
--

* `nothing` - do not push anything (error out) unless a refspec is
  given. This is primarily meant for people who want to
  avoid mistakes by always being explicit.

* `current` - push the current branch to update a branch with the same
  name on the receiving end.  Works in both central and non-central
  workflows.

* `upstream` - push the current branch back to the branch whose
  changes are usually integrated into the current branch (which is
  called `@{upstream}`).  This mode only makes sense if you are
  pushing to the same repository you would normally pull from
  (i.e. central workflow).

* `tracking` - This is a deprecated synonym for `upstream`.

* `simple` - pushes the current branch with the same name on the remote.
+
If you are working on a centralized workflow (pushing to the same repository you
pull from, which is typically `origin`), then you need to configure an upstream
branch with the same name.
+
This mode is the default since Git 2.0, and is the safest option suited for
beginners.

* `matching` - push all branches having the same name on both ends.
  This makes the repository you are pushing to remember the set of
  branches that will be pushed out (e.g. if you always push 'maint'
  and 'master' there and no other branches, the repository you push
  to will have these two branches, and your local 'maint' and
  'master' will be pushed there).
+
To use this mode effectively, you have to make sure _all_ the
branches you would push out are ready to be pushed out before
running 'git push', as the whole point of this mode is to allow you
to push all of the branches in one go.  If you usually finish work
on only one branch and push out the result, while other branches are
unfinished, this mode is not for you.  Also this mode is not
suitable for pushing into a shared central repository, as other
people may add new branches there, or update the tip of existing
branches outside your control.
+
This used to be the default, but not since Git 2.0 (`simple` is the
new default).

--

push.followTags::
	If set to true enable `--follow-tags` option by default.  You
	may override this configuration at time of push by specifying
	`--no-follow-tags`.

push.gpgSign::
	May be set to a boolean value, or the string 'if-asked'. A true
	value causes all pushes to be GPG signed, as if `--signed` is
	passed to linkgit:git-push[1]. The string 'if-asked' causes
	pushes to be signed if the server supports it, as if
	`--signed=if-asked` is passed to 'git push'. A false value may
	override a value from a lower-priority config file. An explicit
	command-line flag always overrides this config option.

push.pushOption::
	When no `--push-option=<option>` argument is given from the
	command line, `git push` behaves as if each <value> of
	this variable is given as `--push-option=<value>`.
+
This is a multi-valued variable, and an empty value can be used in a
higher priority configuration file (e.g. `.git/config` in a
repository) to clear the values inherited from a lower priority
configuration files (e.g. `$HOME/.gitconfig`).
+
----

Example:

/etc/gitconfig
  push.pushoption = a
  push.pushoption = b

~/.gitconfig
  push.pushoption = c

repo/.git/config
  push.pushoption =
  push.pushoption = b

This will result in only b (a and c are cleared).

----

push.recurseSubmodules::
	Make sure all submodule commits used by the revisions to be pushed
	are available on a remote-tracking branch. If the value is 'check'
	then Git will verify that all submodule commits that changed in the
	revisions to be pushed are available on at least one remote of the
	submodule. If any commits are missing, the push will be aborted and
	exit with non-zero status. If the value is 'on-demand' then all
	submodules that changed in the revisions to be pushed will be
	pushed. If on-demand was not able to push all necessary revisions
	it will also be aborted and exit with non-zero status. If the value
	is 'no' then default behavior of ignoring submodules when pushing
	is retained. You may override this configuration at time of push by
	specifying '--recurse-submodules=check|on-demand|no'.
	If not set, 'no' is used by default, unless 'submodule.recurse' is
	set (in which case a 'true' value means 'on-demand').

push.useForceIfIncludes::
	If set to "true", it is equivalent to specifying
	`--force-if-includes` as an option to linkgit:git-push[1]
	in the command line. Adding `--no-force-if-includes` at the
	time of push overrides this configuration setting.

push.negotiate::
	If set to "true", attempt to reduce the size of the packfile
	sent by rounds of negotiation in which the client and the
	server attempt to find commits in common. If "false", Git will
	rely solely on the server's ref advertisement to find commits
	in common.
