Q:

What is the Mercurial equivalent to `git log --graph --decorate --oneline --all`?

How do I do
git log --graph --decorate --oneline --all

in mercurial?

I want --graph, so I can see the relationship between commits
I want --decorate so that it prints the branch name for each tip and/or each commit, including the local remote-tracking branches which show exactly the situation on any of the configured remote (I have two remotes); it also shows the specials like HEAD, which I want to see as well
I want --oneline, so that I see many nodes on the screen
I want --all, so that I see all branches not just the one I checked out

including bookmarks
including the situation on the remotes (compared to the local situation)

A:

--graph is --graph in hg. And the effect of --all is the default.
For --decorate and --oneline I have in my .hgrc:
[alias]
la = log --graph --template {oneline}

[templatealias]
oneline = '{hash}{myBranch}{myBookmarks}{myTags} {name} {commitMsg}\n'
hash = "{label(ifeq(phase, 'secret', 'yellow', ifeq(phase, 'draft', 'blue', 'red')), node|short)}"
myBranch = "{ifeq(branch, 'default', '', label('green', ' ({branch})'))}"
myBookmarks = "{bookmarks % ' {bookmark}{ifeq(bookmark, active, '*')}{bookmark}'}"
myTags = "{label('yellow', tags % ' {tag}')}"
name = '{label('blue', author|person)}'
commitMsg = '{desc|firstline|strip}'

[experimental]
graphshorten = true

This solution does not use the deprecated --style argument. Instead, as you can see in the alias-section, it is activated by hg la via the --template option. As templates can nest, the name of “oneline” will show the hash, the branch, the bookmarks, the tags, the committer and the commit message.
The hash will change the color depending on the phase of the commit in this example.
Even though the template just suggests the final newline for each line, hg puts an additional empty line between each commit. The graphshorten = true option avoids this. 
You need an extension to have something similar to the concept of remote tracking branches.
Here the outcome (awesome colors missing):
| o  821ee2270f00 (lowercase_eats_whitespace) Robert Siemer add 'lowercase_eats_whitespace' directive
| o  9a86b49dc3ba (settings_passing) Robert Siemer restructure settings-passing in parsers and grako
|/
o    31664ddc943b Juancarlo Añez Merged in siemer/grako/siemer_fixup_regex (pull request #43)
|\
| o  317cea8eba42 (siemer_fixup_regex) Robert Siemer buffering.py: remove a superfluous regexp.DOTALL from a '[...]+' pattern
|/
o  31641ef78ba8 apalala Added tag 3.9.1 for changeset f33a2e80bb7d
o  f33a2e80bb7d 3.9.1 apalala Getting ready for release 3.9.1

A:

With Mercurial 3.8 just configure your .hgrc with
[experimental]
graphstyle.parent = |
graphstyle.grandparent = '
graphstyle.missing = 
graphshorten = true

and with the appropriate template will get
$ hg log --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}"
...
| o  20881 - transaction: add onclose/onabort hook for pre-close logic
| o  20880 - clone: put streaming clones in a transaction
| o  20879 - fncache: remove the rewriting logic
| o  20878 - pull: prevent duplicated entry in `op.pulledsubset`
| o  20877 - bundle2: part params
| o  20876 - bundle2: support for bundling and unbundling payload
| o  20875 - merge with stable
|/|
o |  20874 stable - Added signature for changeset 3f83fc5cfe71
o |  20873 stable - Added tag 2.9.2 for changeset 3f83fc5cfe71
o |  20872 stable 2.9.2 - backout: correct commit status of no changes made (BC)
o |  20871 stable - backout: document return code of merge conflict
| o  20870 - merge with stable
|/|
o |  20869 stable - i18n: fix "% inside _()" problems
o |  20868 stable - i18n: fix "% inside _()" problems
o |  20867 stable - merge: fix lack of "%s" in format string causing TypeError a
o |  20866 stable - i18n-pt_BR: synchronized with c57c9cece645
o |  20865 stable - i18n-ja: synchronized with e259d4c462b5
| o  20864 - bundle2: support unbundling empty part
| o  20863 - revset: raise ValueError when calling min or max on empty smartset
| o  20862 - revpair: smartset compatibility
| o  20861 - revsetbenchmark: add entry for ::rev::
:

I use this alias
[alias]
ll = log -l 12 --graph --template "{rev}{ifeq(branch,'default','',' {branch}')}{if(bookmarks,' {bookmarks}')}{if(tags,' {tags}')} - {desc|firstline}"

so
$ hg ll
o  29100 @default tip - templater: add separate() template function
o  29099 - bookmarks: jettison bmstore's write() method per deprecation policy
o    29098 - merge with stable
|\
| o  29097 stable - deprecation: gate deprecation warning behind devel configurn
| |
| ~
o  29096 - crecord: update downarrowshiftevent() docstring, remove todo
o  29095 - crecord: remove things that don't happen in functions from their docs
o  29094 - crecord: remove skipfolded keyword argument from patchnode.previtem()
o  29093 - crecord: update a copy-pasted comment in downarrowshiftevent()
o  29092 - crecord: drop the version condition for amend
o  29091 - crecord: add/remove blank lines (coding style)
o  29090 - localrepo: jettison parents() method per deprecation policy (API)
o  29089 - revset: define _parsealias() in _aliasrules class
|
~

I think is very similar to Git
$ git log --graph --decorate --oneline --all
* d32f204 (origin/master, origin/HEAD) ; Remove instrumentation of tramp.el
* 4c7f329 ; Remove instrumentation of tramp-tests.el
* 51c816b Fix a problem of tramp-tests on hydra.
* 62d7aca Pacify byte-compiler in lisp/vc
*   9e6302c ; Merge from origin/emacs-25
|\  
* \   6d0703a Merge from origin/emacs-25
|\ \  
* | | 433d366 'text-quoting-style' now affects only ` and '
* | | 8939ae6 Revert "Fix spurious fontification of "for (; a * b;)" in CC Mod" 
* | | cfa59d6 ; Instrument tramp-tests.el
* | | c20cc09 Move "Recent messages" earlier in report-emacs-bug
* | | a88f22b Pacify byte compiler in tramp.el
* | |   c8b7a6a Merge from origin/emacs-25
|\ \ \  
* \ \ \   9418ab3 ; Merge from origin/emacs-25
|\ \ \ \  
* | | | | d6dac36 ; Instrument tramp.el
* | | | | a8231e0 CC Mode now uses the new :after-hook feature of define-deriv-e
* | | | | 608f2bd ; Instrument tramp-tests.el
* | | | | fd45b52 Fix the jit-lock-fontify-now test names
:

A:

There is no direct equivalent (or, if there is, I would like to know :-) ).
Some of this is simply because some things do not apply in Mercurial, where any given commit is on one and only one branch, and hg log defaults to showing all commits on all branches.  Similarly, there is no such thing as HEAD: there is a current branch and a current commit, which you can name as branch . or revision ..  These function like HEAD, except that they cannot be an anonymous branch.
It's impossible to view the remote separately as there are no remote-tracking branches.  Either you have any incoming commits (hg incoming prints nothing) so it will already be in the log output, or you do not (so you must run hg pull, usually without -u, to get it,1 in order to see it).
The current commit shows up in hg log -G (aka hg glog) output as @ instead of o, so that's how you identify it.
Here is what I use (not entirely satisfactory, and I always miss topo-sorting):
[alias]
# lga comes from
# http://jamie-wong.com/2012/07/11/my-mercurial-setup-and-workflow-at-khan-academy/
lga = glog --style ~/.hgstuff/map-cmdline.lg

The URL still works as of this moment, but here is the contents of my map-cmdline.lg file.  Note that colors are hardcoded; at the time I wrote this, hg did not have named color words (might still not, I am pretty out of date on the newest hg updates):
changeset = '\033[0;31m{rev}:{node|short}:{phase} {branches}{bookmarks}{tags} \033[0;34m{author|person}\033[0m\n{desc|firstline|strip} \033[0;32m({date|age})\033[0m\n\n'
changeset_verbose = '\033[0;31m{rev}:{node}:{phase} \033[0;34m{author|person}\033[0m {desc|firstline|strip} \033[0;32m({date|age}) {branches}{bookmarks}{tags}\n\n'

start_branches = ' '
branch = '\033[0;32m{branch}\033[0m'

start_bookmarks = ' '
bookmark = '\033[0;32m[{bookmark}]\033[0m '
last_bookmark = '\033[0;31m[{bookmark}]\033[0m'

start_tags = ' '
tag = '\033[0;32m{tag}\033[0m, '
last_tag = '\033[0;32m{tag}\033[0m'

1Note that there is a minor flaw here, if you try to equate some Hg workflows with Git equivalents, or vice versa.  In particular, hg incoming could list 5 commits, then hg pull could fetch 12 of those 5, because someone pushed 7 more in between the two steps.  Git's separate fetch step and remote-tracking branches solve this for you.  The other method of dealing with it, which I used for a while for other reasons, is to keep a local intermediate Mercurial repository for pull and push from the shared one.
That is, if we designate repo U as the upstream shared repository, we make a clone I locally, then a clone of I in W for doing work.  We then update I (using hg pull -u), then view hg incoming (and hg outgoing) in W for speed and consistency.  It's best to push directly from W to U to avoid having to fuss with commit phases, but this is a pain for other reasons.  I never found a truly satisfactory setup, and gave up the intermediate repository whenever I was working on-site: it was more for dealing with slow networks.

