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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html