git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Feature Request] git blame showing only revisions from git rev-list --first-parent
@ 2015-09-11 10:47 Stephen Connolly
  2015-09-11 14:01 ` Jeff King
  0 siblings, 1 reply; 16+ messages in thread
From: Stephen Connolly @ 2015-09-11 10:47 UTC (permalink / raw)
  To: git

Background
===

My colleagues and I disagree on how exactly to handle feature
development in branches.
There are approximately two camps:

Camp 1: All feature branches should be squashed after code review to a
single commit before merging.

Camp 2: Leave the history of development alone, being able to trace
why the feature evolved that way is useful information, never squash
commits after code review.

Being somebody who leans towards the second camp I have been trying to
understand the first camps objections...

Those objections seem to boil down to tracing when the feature was introduced.

I have been able to get past some of the objections by pointing out
the `--first-parent` option available to `git log` and `gitk`. With
that command line option they are presented with a single history of
the branch and all merge commits are shown *as if squashed* (or at
least that is what it looks like from my testing)

The only remaining objection is around `git blame`...

You see a problem on one line in the file, you run `git blame
file.txt` and it says <rev1> was when it changed...

Now <rev1> is not on the main line of the branch but actually is a
commit that was merged from one branch to another before finally being
merged into the current branch in <rev2>

That is a complex nest of commits to detangle, especially when we have
had some refactoring branches with multiple experiments that drag on
over the course of a couple of weeks with many commits... all they
want to know is <rev2>.

Yes I could (and I do try to) teach them how to find the commit where
that SHA was merged into the current branch, but really they just want
to be able to see the current branches SHAs only.

Doing some reading in the git blame sources I discovered that git
blame takes the rev-list command line options... so I thought "hey
--first-parent should work"

Except it doesn't

I suspect that this is because of how blame uses rev-list

Request
===

A command line option to `git blame HEAD -- path` that instructs that
the revisions of blame be the revisions where the change was applied
to the current branch not the revision where the change first
originated (i.e. limit commits to `git rev-list --first-parent HEAD`)

I can get what I want with the following:

git rev-list --first-parent HEAD | awk '{print p " " $0}{p=$0}' >
tmpfile && git blame -b -S tmpfile HEAD -- path && rm tmpfile

But that is a rather ugly command. Could we have something built in to
git blame to make this much easier for users?

Thanks

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2015-10-18 17:41 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-11 10:47 [Feature Request] git blame showing only revisions from git rev-list --first-parent Stephen Connolly
2015-09-11 14:01 ` Jeff King
2015-09-11 15:31   ` Stephen Connolly
2015-09-11 16:35   ` Junio C Hamano
2015-09-11 19:06     ` Junio C Hamano
2015-09-12  3:30       ` Jeff King
2015-09-12  8:29         ` Junio C Hamano
2015-09-12 22:09           ` Philip Oakley
2015-09-13 10:07           ` Jeff King
2015-09-14  5:19             ` Junio C Hamano
2015-09-15 10:05               ` Jeff King
2015-09-16  1:14                 ` Junio C Hamano
2015-09-16 17:37                   ` Jeff King
2015-09-17 17:03                     ` Junio C Hamano
2015-10-18 11:38                 ` Max Kirillov
2015-10-18 17:41                   ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).