Diff
The diff
command displays changes in different elements of the working environment: files, directories, commits, and even branches. In other words, diff
shows what changed for one or several elements in a repository.
Syntax
The syntax for comparing data changes in a repository using diff
is:
git diff
Examples
There are various ways in which git diff
can be used.
1. git diff
Used as it is, the command shows the difference between the working directory and the staging area.
Suppose the initial version of the file scene.txt
below has already been committed.
COBBYTOIn a dream, brain activity will be roughly thirty times higher than usual. The effect is increased by entering a dream within that dream.ARIANEAHow long should each level take?
The file scene.txt
is modified as follows and the changes are saved in the working directory.
COBBYTOIn a dream, brain activity will be roughly thirty times higher than usual. The effect is increased by entering a dream within that dream.ARIANEAHow long?COBBYTOAccording to my calculations, the time span is approximately three days at the top layer, three months one layer down, and six years a level after.ARIANEAWho would want to live in an illusory world for six years?
Using git diff
in the terminal will produce the following output:
$ git diffdiff --git a/scene.txt b/scene.txtindex c16c37f..c680bb4 100644--- a/scene.txt+++ b/scene.txt@@ -2,4 +2,10 @@ COBBYTOIn a dream, brain activity will be roughly thirty times higher than usual. The effect is increased by entering a dream within that dream.ARIANEA-How long?\ No newline at end of file+How long?++COBBYTO+According to my calculations, the time span is approximately three days at the top layer, three months one layer down, and six years a level after.++ARIANEA+Who would want to live in an illusory world for six years?\ No newline at end of file
With only one file tracked, using git diff
is the same as using git diff scene.txt
2. git diff –cached
git diff --cached
displays the changes between the staging area and the last commit (i.e., changes between what is staged but not yet committed).
If git diff --cached
is run in the terminal, no output is produced. This is expected because nothing has been added to the staging area yet. Therefore, there’s no status change between the latter and the last commit. This can be verified by running git status
.
$ git statusOn branch masterChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: scene.txtno changes added to commit (use "git add" and/or "git commit -a")
Adding scene.txt
to the staging area and running git diff --cached
in the terminal yield the following:
$ git diff --cacheddiff --git a/scene.txt b/scene.txtindex c16c37f..c680bb4 100644--- a/scene.txt+++ b/scene.txt@@ -2,4 +2,10 @@ COBBYTOIn a dream, brain activity will be roughly thirty times higher than usual. The effect is increased by entering a dream within that dream.ARIANEA-How long?\ No newline at end of file+How long?++COBBYTO+According to my calculations, the time span is approximately three days at the top layer, three months one layer down, and six years a level after.++ARIANEA+Who would want to live in an illusory world for six years?\ No newline at end of file
The output is the same as the output for git diff
in the previous section because the changes saved have been added to the staging area. Additionally, if git diff
is run in the terminal, no output is produced.
Looking to contribute?
- Learn more about how to get involved.
- Edit this page on GitHub to fix an error or make an improvement.
- Submit feedback to let us know how we can improve Docs.