When working with Git, tracking changes is crucial. One of the most fundamental and useful commands is git diff
, which shows the differences between various states of your project. But how exactly does it work? What does it compare, and how can you use it effectively?
In this post, we’ll break down how git diff
operates, the common scenarios where you use it, and how to interpret its output.
What is git diff
?
git diff
is a command that shows line-by-line changes between two sets of files or commits in a Git repository. It compares the content of files and outputs the differences, helping you understand what has been added, removed, or modified.
How Does git diff
Work Under the Hood?
Git stores your project history as snapshots of your entire project tree, and each commit points to a tree object representing your files. git diff
works by:
- Taking two inputs to compare—these can be:
- The working directory vs. the staging area (index)
- The staging area vs. the last commit
- Two commits or branches against each other
- Performing a file-by-file comparison for all files that differ between those inputs.
- Showing differences line by line with context, highlighting additions and deletions.
Common git diff
Use Cases
1. Compare Working Directory with Staging Area (What’s Changed but Not Staged)
git diff
This shows what you have modified in your working directory that hasn’t been added to staging yet.
2. Compare Staging Area with Last Commit (What’s Staged but Not Committed)
git diff --cached
or
git diff --staged
This shows changes staged for the next commit.
3. Compare Two Commits
git diff commit1 commit2
This compares the files between two commit hashes, showing what changed.
4. Compare Branches
git diff branch1 branch2
Useful to see all differences between two branches.
Understanding the Output of git diff
A typical git diff
output looks like this:
diff --git a/file.txt b/file.txt
index 83db48f..f735c20 100644
--- a/file.txt
+++ b/file.txt
@@ -1,5 +1,6 @@
Line 1
-Line 2
+Line 2 modified
+New line 3
Line 4
- Lines starting with
-
show removed lines. - Lines starting with
+
show added lines. - Context lines (no prefix) show unchanged lines for reference.
- The
@@
line shows the chunk location in the file.
Advanced Options
git diff --name-only
: Show only the names of changed files.git diff --stat
: Show a summary with insertions/deletions count.git diff --color
: Force colored output for better readability.git diff -w
: Ignore whitespace changes.
Summary
Command | Description |
---|---|
git diff | Show unstaged changes in working directory |
git diff --staged or --cached | Show staged changes ready to commit |
git diff <commit1> <commit2> | Compare two commits |
git diff <branch1> <branch2> | Compare two branches |
Final Thoughts
git diff
is an essential tool for any developer using Git. It helps you inspect changes in detail before committing or merging, reducing errors and improving code quality.
Mastering git diff
will give you clearer insights into your code’s evolution and make debugging easier.