Using Git, how can you find the difference between the current and the last version?
git diff last version:HEAD 2 14 Answers
I don't really understand the meaning of "last version".
As the previous commit can be accessed with HEAD^, I think that you are looking for something like:
git diff HEAD^ HEADThat also can be applied for a :commithash
git diff $commithash^ $commithashAs of Git 1.8.5, @ is an alias for HEAD, so you can use:
git diff @~..@The following will also work:
git showIf you want to know the diff between head and any commit you can use:
git diff commit_id HEADAnd this will launch your visual diff tool (if configured):
git difftool HEAD^ HEADSince comparison to HEAD is default you can omit it (as pointed out by Orient):
git diff @^
git diff HEAD^
git diff commit_idWarnings
- @ScottF and @Panzercrisis explain in the comments that on Windows the
~character must be used instead of^.
Assuming "current version" is the working directory (uncommitted modifications) and "last version" is HEAD (last committed modifications for the current branch), simply do
git diff HEADCredit for the following goes to user Cerran.
And if you always skip the staging area with -a when you commit, then you can simply use git diff.
Summary
git diffshows unstaged changes.git diff --cachedshows staged changes.git diff HEADshows all changes (both staged and unstaged).
Source: git-diff(1) Manual Page – Cerran
2As pointed out on a comment by amalloy, if by "current and last versions" you mean the last commit and the commit before that, you could simply use
git show 2 Difference between last but one commit and last commit (plus current state, if any):
git diff HEAD~or even (easier to type)
git diff @~where @ is the synonim for HEAD of current branch and ~ means "give me the parent of mentioned revision".
You can do it this way too:
Compare with the previous commit
git diff --name-status HEAD~1..HEADCompare with the current and previous two commits
git diff --name-status HEAD~2..HEAD Just use the cached flag if you added, but haven't committed yet:
git diff --cached --color 2 Quick and simple, assuming you're in the master:
git diff (checkout_id):file.txt file.txtExample:
git diff asdfioei91819280din198:file.txt file.txt 2 Firstly, use "git log" to list the logs for the repository.
Now, select the two commit IDs, pertaining to the two commits. You want to see the differences (example - Top most commit and some older commit (as per your expectation of current-version and some old version)).
Next, use:
git diff <commit_id1> <commit_id2>or
git difftool <commit_id1> <commit_id2> If the top commit is pointed to by HEAD then you can do something like this:
commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2Diff between the first and second commit:
git diff HEAD~1 HEADDiff between first and third commit:
git diff HEAD~2 HEADDiff between second and third commit:
git diff HEAD~2 HEAD~1And so on...
If you want the changes for the last n commits, you can use the following:
git diff HEAD~n
So for the last 5 commits (count including your current commit) from the current commit, it would be:
git diff HEAD~5
I use Bitbucket with the Eclipse IDE with the Eclipse EGit plugin installed.
I compare a file from any version of its history (like SVN).
Menu Project Explorer → File → right click → Team → Show in history.
This will bring the history of all changes on that file. Now Ctrl click and select any two versions→ "Compare with each other".
This will also work for tags (remove the 'uniq' below and other parts if you need to see all changes):
git diff v1.58 HEAD The below is the same, and that could be useful for continuous integration (CI) for microservices in a monolithic repository:
git diff v1.58 HEAD --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> (Credit - )
to show individual changes in a commit, to head.
git show Head~0to show accumulated changes in a commit, to head.
git diff Head~0where 0 is the desired number of commits.
If last versions means last tag, and current versions means HEAD (current state), it's just a diff with the last tag:
Looking for tags:
$ git tag --list
...
v20.11.23.4
v20.11.25.1
v20.11.25.2
v20.11.25.351The last tag would be:
$ git tag --list | tail -n 1
v20.11.25.351Putting it together:
tag=$(git tag --list | tail -n 1)
git diff $tag