How can I diff a file, say pom.xml
, from the master branch to an arbitrary older version in Git?
To see what was changed in a file in the last commit:
git diff HEAD~1 path/to/file
You can change the number (~1) to the n-th commit which you want to diff with.
Generic Syntax :
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
for all files named "FileName.xml" anywhere in your repo.
Notice the space between "--" and "**"
Answer for your question:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
as always with git, you can use a tag/sha1/"HEAD^" to id a commit.
Tested with git 1.9.1 on Ubuntu.
git diff <revision> <path>
For example:
git diff b0d14a4 foobar.txt
If neither commit is your HEAD then bash's brace expansion proves really useful, especially if your filenames are long, the example above:
git diff master~20:pom.xml master:pom.xml
Would become
git diff {master~20,master}:pom.xml
More on Brace expansion with bash.
If you want to see the difference between the last commit of a single file you can do:
git log -p -1 filename
This will give you the diff of the file in git, is not comparing your local file.
For people interested in doing the same from GitHub, see comparing commits across time.