How to compare the working copy, staging copy and committed copy of a file using git
Assume for a moment I have a file in a repository called LICENSE.txt. The contents looks as follows:
Copyright 2014 MyCompany. All Rights Reserved.
Since its 2015 I changed the year so its 2015:
Copyright 2015 MyCompany. All Rights Reserved.
And then staged the file
git add LICENSE.txt
Being a tad distracted, I made another change to LICENSE.txt to reflect that another organization shares in the copyright.
Copyright 2015 MyCompany and Affiliates. All Rights Reserved. Copyright 2015 Other Company. All Rights Reserved.
I'm able to see the difference between my working copy and staged copy by running
And I'm able to see the difference between the staged copy and committed copy by running
git diff --cached
How do I compare the committed copy (the one without the year change) with working copy (the one with the additional copyright)?
This is purely an example. There are cases much more complex where I had the need to compare what I have staged with changes I subsequently made to the file. Comparing the contents of the working copy and the staged copy will determine whether I should replaced the staged copy or not.
I'm running git 1.9.5 on Windows Server 2012 R2.
How do I compare the staged copy (the one with the year change) with working copy. [...] I had the need to compare what I have staged with changes I subsequently made to the file
That would still be git diff.
(edit by OP: How do I compare the committed copy (the one with the year change) with working copy
Then it would be git diff HEAD.)
If you are looking for something different from git diff and diff --cached, that leaves you with:
git diff HEAD
That is: the difference between the version already committed and the working tree.
- git diff - Compare working area to index.
- git diff --staged - Compare stage are to repository.
- git diff HEAD - Compare working area to repository
To illustrate that, I changed a file with “Name Staged” text and than I added it (git add .). After that, I changed the file again, now I replaced the text to “Name Working Area” and than I run the follow commands:
Now you can see clearly how it works. Pretty cool, right?