git diff renamed file

Question:

I have a file a.txt.

The contents of a.txt is “hello”.

I make a commit.

I then move a.txt into a test dir.

I then make my second commit.

Finally, I edit a.txt to say “goodbye” instead.

I make my last commit.

Now here is my question:

How do I diff the contents of a.txt between my last commit and my first commit?

I’ve tried:
git diff HEAD^^..HEAD -M a.txt, but that didn’t work. git log --follow a.txt properly detects the rename, but I can’t find an equivalent for git diff. Is there one?

Answer:

The issue with the difference between HEAD^^ and HEAD is that you have an a.txt in both commits, so just considering those two commits (which is what diff does), there is no rename, there is a copy and a change.

To detect copies, you can use -C:

Result:

Incidentally, if you restrict your diff to just one path (as you do in git diff HEAD^^ HEAD a.txt you aren’t ever going to see the renames or copies because you’ve excluded the everything apart from a single path and renames or copies – by definition – involve two paths.

Leave a Reply