hg push

push changes to the specified destination



hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]


Push changesets from the local repository to the specified destination.

This operation is symmetrical to pull: it is identical to a pull in the destination repository from the current one.

By default, push will not allow creation of new heads at the destination, since multiple heads would make it unclear which head to use. In this situation, it is recommended to pull and merge before pushing.

Use --new-branch if you want to allow push to create a new named branch that is not present at the destination. This allows you to only create a new branch without forcing other changes.


Extra care should be taken with the -f/--force option, which will push all new heads on all branches, an action which will almost always cause confusion for collaborators.

If -r/--rev is used, the specified revision and all its ancestors will be pushed to the remote repository.

If -B/--bookmark is used, the specified bookmarked revision, its ancestors, and the bookmark will be pushed to the remote repository. Specifying . is equivalent to specifying the active bookmark's name.

Please see hg help urls for important details about ssh:// URLs. If DESTINATION is omitted, a default path will be used.

The --pushvars option sends strings to the server that become environment variables prepended with HG_USERVAR_. For example, --pushvars ENABLE_FEATURE=true, provides the server side hooks with HG_USERVAR_ENABLE_FEATURE=true as part of their environment.

pushvars can provide for user-overridable hooks as well as set debug levels. One example is having a hook that blocks commits containing conflict markers, but enables the user to override the hook if the file is using conflict markers for testing purposes or the file format has strings that look like conflict markers.

By default, servers will ignore --pushvars. To enable it add the following to your configuration file:

pushvars.server = true

Returns 0 if push was successful, 1 if nothing to push.


-f, --force force push
-r, --rev <REV[+]>
 a changeset intended to be included in the destination
-B, --bookmark <BOOKMARK[+]>
 bookmark to push
-b, --branch <BRANCH[+]>
 a specific branch you would like to push
--new-branch allow pushing a new branch
--pushvars <VALUE[+]>
 variables that can be sent to server (ADVANCED)
--publish push the changeset as public (EXPERIMENTAL)
-e, --ssh <CMD>
 specify ssh command to use
--remotecmd <CMD>
 specify hg command to run on the remote side
--insecure do not verify server certificate (ignoring web.cacerts config)

[+] marked option can be specified multiple times