threads / discuss / 26274

git diff

Subject: git diff

## tl;dr

2 messages between Jan 13, 2011 and Jan 17, 2011.

replies: 1people: 2as markdown or json

Carter Lamb· Jan 13, 2011, 22:46 UTC · lore

I use git diff --summary --numstat <commit> to report the files modified, created, and deleted between the current commit and some prior commit. The --stat and --numstat options count the lines added and deleted for each file. Is there a way to report the lines modified for each file. For example:

Given content below for commit 1: aaaaa ccccc

Given content below for commit 2: aaaaa bbbbb ccccc

Given content below for commit 3: Aaaaa Bbbbb ccccc ddddd

git diff --numstat between commits 1 and 2 will report one line added. git diff --numstat between commits 2 and 3 will report three lines added and two lines deleted. I'd like to see the diff between commits 2 and 3 report two lines modified and one line added. Can this be done?

Best, Carter

Jeff King· Jan 17, 2011, 22:30 UTC · re: Carter Lamb · lore

Re: git diff

On Thu, Jan 13, 2011 at 04:46:16PM -0600, Carter Lamb wrote:
Show 5 quoted lines
> I use git diff --summary --numstat <commit> to report the files
> modified, created, and deleted between the current commit and some
> prior commit. The --stat and --numstat options count the lines added
> and deleted for each file. Is there a way to report the lines modified
> for each file. For example:
Not really, because it's not well defined. Consider your example:
Show 14 quoted lines
> Given content below for commit 1:
> aaaaa
> ccccc
> 
> Given content below for commit 2:
> aaaaa
> bbbbb
> ccccc
> 
> Given content below for commit 3:
> Aaaaa
> Bbbbb
> ccccc
> ddddd

How do we know that "Aaaaa" is a modification of line "aaaaa", and not simply the deletion of the old line and the addition of a new one? It's easy to come up with a case where that is more obvious:

  -aaaaa
  +ddddd
but there are many shades of gray in between. Is:
  -aaaaa
  +Aaada

the deletion of an old line and the introduction of a new one, or the modification of an existing line? So fundamentally the diff format just deals with added and removed lines, and modifications are represented as a delete followed by an add.

Which isn't to say you couldn't think of many clever algorithms for heuristically determining a modification, but git doesn't do that itself in numstat.

-Peff

← back to recent threads