I can\'t seem to get git log --branches
to correctly filter its output. It seems as if Git ignores it.
For example, the head of git log --graph --
Because you specified --all
, you override any branch specifications you made.
Firstly, (the other) Adam is right that it doesn't make sense to use --all
for this: if you only want to see one branch like your question states, why ask for all branches?
Secondly, as already stated in comments to other answers, you don't need --branches
; just do git log mybranch
.
Thirdly, I can explain why git log --branches=mybranch
doesn't work. The git-log(1) man page says:
--branches[=<pattern>]
Pretend as if all the refs in refs/heads are listed on
the command line as <commit>. If <pattern> is given,
limit branches to ones matching given shell glob. If
pattern lacks ?, *, or [, /* at the end is implied.
The last sentence is the crucial point here. If the <pattern>
is just mybranch
then there is no globbing character, so git-log
interprets it as if you'd typed
git log --branches=mybranch/*
which only matches references under $repo/.git/refs/heads/mybranch/*
, i.e. branches which begin with mybranch/
.
There is a dirty hack to prevent the /*
from being assumed:
git log --branches=[m]ybranch
but I can't think of any good reason why you would want to do this rather than just typing
git log mybranch
--branches
git log <commit>
lists all commits that are reachable from any <commit>
that you list on the command line.
--all
does the same but pretends that you listed all the refs in refs/
.
--branches[=<pattern>]
does the same but pretends that you listed all the refs in refs/heads
. It also allows you to limit with a glob pattern. As a gotcha, if your glob pattern lacks ?
, ,
or [
, then an /
at the end is implied.
git log topic1 topic2 topic3
means list all the commits reachable from topic1
, topic2
, or topic3
.
git log -all
means list all the commits that are reachable from any of the refs that are output from git show-ref
.
git log --branches="topic*"
means list all the commits that are reachable from from any branch that starts with the prefix topic
.
https://schacon.github.io/git/git-log.html
https://schacon.github.io/git/git-rev-list.html
Does anyone know how to use this command successfully?
EDIT: All I want to be able to do is get the log of one branch or another, without having to do a checkout first.
In order to visualise the graph of commits on all branches and remotes do this:
$ git log --graph --branches=* --remotes=* --decorate
Use this with other git-log
options to control verbosity, e.g. --oneline
, --name-status
, etc.
You may have to fetch remote changes first in order to see them. You can fetch all remote changes without applying them to your current branch(es) like this:
$ git fetch --all
Let's say your history looked like this
d -- e [refs/tags/release1]
/
a -- b -- c [refs/heads/master]
\
f -- g [refs/heads/dev1]
\
h [refs/heads/dev2]
If you do git log --branches
it's the same git log master dev1 dev2
, so you'll see commits a,b,c,f,g and h. If you did git log release1 --branches=dev*
it's the same as git log release1 dev1 dev2
. You'll see a,d,e,b,f,g, and h, but not c.