git diff will show the changes between your local repository and the remote repository
IMPORTANT NOTE: if you have changed branches on your remote repository, directly after modifying files on your local repository, you will only see the changes that relate to the latest branch you are working with.
You will NOT see the changes in other branches, e.g. if you have modified files on branch “master” and are working with branch “v1”, then your local repository will show your changes as “modified” on “master” and as “unmodified” on “v1”.
This is a very important concept for when you want to merge two branches (e.g. merge your “master” and “v1” branches):
NOTE: I’m not talking about merging commits but rather merging the branches. There is no difference.
Merging commits only works if there are changes in both sides. If you have modified the file on your local repository, but not on your remote repository, running ‘git status’ will show that you need to merge the changes (but don’t worry, we will fix this with some scripts soon).
If you have modified a file on both sides (local and remote repository) git will give you a conflict and not allow you to merge the branches.
With this knowledge, now we can run ‘git diff’ on our local repository.
After modifying a file, let’s run ‘git status’ to see what we changed:

git diff –cached will show the changes between your local repository and the staging area
IMPORTANT NOTE: You need to have the changes staged within your local repository in order to view them with git diff –cached. If you are not using the staging area, git diff will not show changes that were committed to the remote repository.
In conjunction with a remote repository, git diff will show the changes between your local repository and the staging area.
“git diff” : “A common usage for ‘git diff’ would be to compare your local working directory with what is in the last commit on the branch.”1
“git diff –cached” : “If you are looking to compare your working copy with a committed changeset, use ‘git diff –cached’. The ‘–cached’ option tells Git to ask the remote server to use the same index as your local repository.”2
“git diff –staged=y” : “If you are looking to see what changes have been committed without pulling the specific branch, you can specify this option and make the staged changes visible.”3
##Howto git diff –cached will show the changes between your local repository and the staging area.

git diff HEAD^..HEAD will show the changes between your last commit and your current commit
IMPORTANT NOTE: This only shows the changes that have been committed to the current branch HEAD between your last commit and the current commit – unless you are working with a branch. If you are not working with a branch then this will only show the changes that have been committed to the remote repository.
Ok, here we go:
git diff HEAD^..HEAD
Will give you something like this:
<<<<< HEAD^....HEAD : your last commit : CURRENT----- : your current commit >>>>>>> HEAD^….HEAD/master branch changes in both the local and remote repository from any branch since your last committment. So, in other words, if you have been on master since Jan 1st then this will say “everything since then” and not just what is in the current branch.
NOTE: This is just a command, the result is displayed using {{`git diff HEAD^..HEAD`}}. It is up to you, however, whether or not you want to use `git diff HEAD^..HEAD`, ‘git diff HEAD^..HEAD commits’ or just `git diff`.
Note #2: The “^” in the Git command above stands for “previous commit”. So, the command above is saying “Show the differences between the previous commit and my current commit.”
The equivalent to:
echo “
"; git show HEAD^..HEAD; echo "
“
