Re: Git blame only current branch
- From
Jeff King <peff@peff.net>
- Date
- Dec 12, 2011, 16:55 UTC
- Message-ID
- <20111212165542.GA4802@sigill.intra.peff.net>
- In-Reply-To
- <d615954f-bed8-482d-a2e3-e1e741d6dd23@mail>
On Mon, Dec 12, 2011 at 10:24:47AM -0500, Stephen Bash wrote:
> I'm curious if there's a method to make git blame merge commits that > introduce code to the given branch rather than commits on the original > (topic) branch? For example:
Usually when you are interested in seeing merges like this in git-log, you would use one of "--first-parent" or "--merges". However, though "git blame" takes revision arguments, it does its own traversal of the graph that does not respect those options.
Modifying it to do --first-parent is pretty easy:
diff --git a/builtin/blame.c b/builtin/blame.c index 80febbe..c19a8cd 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1191,6 +1191,8 @@ static int num_scapegoats(struct rev_info *revs, struct commit *commit) { int cnt; struct commit_list *l = first_scapegoat(revs, commit); + if (revs->first_parent_only) + return l ? 1 : 0; for (cnt = 0; l; l = l->next) cnt++; return cnt; With that, "git blame --first-parent" produces reasonable results for me. But of course I didn't do more than 30 seconds of testing, so it is entirely possible there are corner cases or unforeseen side effects. Handling --merges is probably a little trickier, as you need to consider only some commits as scapegoats, but still traverse through everything to find the merges. -Peff