Re: [BUG] Move tracking in git diff is not as good as in git status
- From
Kyle J. McKay <mackyle@gmail.com>
- Date
- Feb 5, 2015, 07:39 UTC
- Message-ID
- <099A7D2D-6033-4A16-91DD-E2288BC5C729@gmail.com>
- In-Reply-To
- <20150205061142.GA31599@odin.ulthar.us>
On Feb 4, 2015, at 22:11, Scott Schmit wrote:
Show 12 quoted lines
> In my use of git, I've noticed that "git status" is a lot better at > tracking moves and renames than "git diff", and this has recently > caused > me a lot of headaches because a large number of moves were made in a > single commit, and it was very difficult to figure out which moves > were > right and which were wrong. > > I was using a fairly old version of git (1.7.11), but was able to > reproduce it on git 2.2.1. > > Here's a reproduction recipe:
[...]
> # Now "shift" the files > git mv 2 3 > git mv 1 2
[...]
Show 6 quoted lines
> git commit -m "2=1;3=2;" > > # Neither of these commands get it (but -C gets a glimmer of the > truth) > git diff -M --stat --summary HEAD~.. > git diff -C --stat --summary HEAD~..
Ah, but did you try this:
git diff -B -M --stat --summary HEAD~..
> # Swap the files in place > git mv 3 tmp > git mv 2 3 > git mv tmp 2
[...]
Show 5 quoted lines
> git commit -m "Swap 2 & 3" > > # Diff has no idea > git diff -M --stat --summary HEAD~.. > git diff -C --stat --summary HEAD~..
Again, try this:
git diff -B -M --stat --summary HEAD~..
You can even use this:
git log -B -M --summary
to see them all.
While you can configure -M (or -C) to be on by default (see git config diff.renames), there does not appear to be a config option to turn on - B (--break-rewrites) by default.
And according to a recent thread [1], using -B and -M together can produce incorrect results so you might not want them both on by default anyway.
-Kyle
[1] http://thread.gmane.org/gmane.linux.kernel/1879635