How can I diff a file, say pom.xml
, from the master branch to an arbitrary older version in Git?
You can do:
git diff master~20:pom.xml pom.xml
... to compare your current pom.xml
to the one from master
20 revisions ago through the first parent. You can replace master~20
, of course, with the object name (SHA1sum) of a commit or any of the many other ways of specifying a revision.
Note that this is actually comparing the old pom.xml
to the version in your working tree, not the version committed in master
. If you want that, then you can do the following instead:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
For example:
git diff b0d14a4 foobar.txt
git diff <revision> root/path/file
. –
Vaudevillian 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.
-1
step by step until you get the changes. –
Circus gitlog () { git log -${3:-p} -${2:-1} $1; }
Used like: gitlog Rakefile
or gitlog Rakefile 5
and gitlog Rakefile 10 s
. The first shows one diff; the second shows five diffs; the third shows ten --no-patch
. –
Deviltry 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.
HEAD~1
is substituted for <revision>
, which makes this answer a duplicate. –
Vaudevillian git diff -w HEAD origin/master path/to/file
-w ignores whitespaces
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.
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.
For comparing to 5 commit to the current one, both on master
, just simply do:
git diff master~5:pom.xml master:pom.xml
Also you can refer to commit hash number, for example if the hash number is x110bd64
, you can do something like this to see the difference:
git diff x110bd64 pom.xml
git diff master~20 -- pom.xml
Works if you are not in master branch too.
If you are fine using a graphical tool (or even prefer it) you can:
gitk pom.xml
In gitk you can then click any commit (to "select" it) and right click any other commit to select "Diff this -> selected" or "Diff selected -> this" in the popup menu, depending on what order you prefer.
For people interested in doing the same from GitHub, see comparing commits across time.
If you need to diff on a single file in a stash for example you can do
git diff stash@{0} -- path/to/file
lets say you want to diff the file interrupt.c
located in firmware/src/
difftool between working area (what yet to be committed or staged) and latest commit:
git difftool head firmware/src/interrupt.c
or
git difftool head *interrupt.c
Note: to diff x versions before the last committed version replace "head" with head~x. For example replace "head" with "head~2" to diff between working area and 2 versions prior to the latest commit
difftool between two specific committed versions:
first get the ids for the versions you want to compare by using next line
git log --oneline
you will get a list of all your committed version. choose two and copy their id's.
enter the ids inside {}
:
git difftool {2fae9e6,a21dd00} firmware/src/interrupt.c
or
git difftool {2fae9e6,a21dd00} *interrupt.c
Note: if there is no difference between the files, nothing will open. You will just get an empty line in the git bash
If you are looking for the diff on a specific commit and you want to use the github UI instead of the command line (say you want to link it to other folks), you can do:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
For example:
Note the Previous and Next links at the top right that allow you to navigate through all the files in the commit.
This only works for a specific commit though, not for comparing between any two arbitrary versions.
© 2022 - 2024 — McMap. All rights reserved.
git diff <revision>:foo/ HEAD:foo/
. – Vaudevillian