What is the git equivalent of Mercurial revsets?

Mercurial has a domain-specific language called revsets that allows users to specify sets of revisions.

For example, you might want to list patches that haven’t yet been merged into the branch default:

hg log -r "all() - ancestors('default')"

As a more complex example, the link above gives the example of listing changesets between the revision tagged 1.3 and the revision tagged 1.5 which mention “bug” and affect a file in the directory hgext:

hg log -r "1.3::1.5 and keyword(bug) and file('hgext/*')"

The revset language is quite rich, allowing selection of changesets based on dates, username, commit message, whether the commit exists at a particular remote location, and so on.

Does git have an equivalent mechanism for querying changesets, either in the core program or available as an extension?

One Solution collect form web for “What is the git equivalent of Mercurial revsets?”

To list all commits exept from the default master branch, like I assume the first example does:

git log --all --not master

To get a reslult somewhat equal to the second example:

git log 1.3...1.5 --grep="bug" -- hgext
Git Baby is a git and github fan, let's start git clone.