Re: The merge from hell...
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- Feb 2, 2006, 08:44 UTC
- Message-ID
- <Pine.LNX.4.64.0602020027400.21884@g5.osdl.org>
- In-Reply-To
- <cc723f590602020007s43f89d10i4529d118ade7c764@mail.gmail.com>
On Thu, 2 Feb 2006, Aneesh Kumar wrote:
> > Ok i tried using --cc. But then as per the man page if the > optimization makes the all the hunks disapper then commit log is not > show unless -m is used.
Ahh. You're mis-using git-diff-tree.
git-diff-tree will _never_ show the commit log if the diff ends up being empty. That can actually happen even for a regular commit, because we had some early bugs that allowed them.
See commit 69d37960b578be0a69383bd71d06c1fcfb86e8b9, for example. Notice how
git-diff-tree --pretty 69d37960
is entirely silent, even though
git log 69d37960
clearly shows that the commit exists. I screwed up a commit, and effectively applied an empty patch (this was before git-apply would notice, and consider it an error - something I fixed very soon afterwards ;^).
> Is there a way to get the commit log printed.
Yes. What you should do is to do
git-rev-list --parents --pretty
which gives the revision _log_ in pretty format.
The difference between "git-rev-list --pretty" and "git-diff-tree --pretty" is really exactly that "git-rev-list" lists every revision, while git-diff-tree only lists revisions that _differ_ in the trees.
This, btw, is also really the main difference between doing a "git log" and doing a "git whatchanged". A "git log" shows all revisions (and uses "git-rev-list --pretty"). While "git whatchanged" shows what _changed_ (and uses "git-diff-tree --pretty").
For a revision tool like gitview, you want to use "git-rev-list --pretty".
[ SIDE NOTE! Actually, there's another format that you may find easier to parse automatically: "git-rev-list --header". It uses the raw format, and adds a NUL character between each rev. That makes things like the date etc trivial to parse, and it's also slightly easier to see the end of a commit message vs just a normal end-of-line.
So "gitk", for example, really parses the output of
git-rev-list --header --topo-order --parents
to generate the revision list. The "--topo-order" part guarantees that all children will always be shown before any parents. ]
Hope that clarifies the issue.
Linus