Introduction
When working with Git, the git diff command is essential for tracking changes between commits, branches, or files. By default, git diff shows changes at the line level, which can sometimes be too broad—especially when only a few words within a line have been modified.
This is where git diff --word-diff comes in handy. It allows you to see word-level differences, making it easier to pinpoint exact changes in your text. Whether you're reviewing documentation, code comments, or configuration files, --word-diff provides a clearer and more granular view of modifications.
How to Use git diff --word-diff
The basic syntax for git diff --word-diff is:
git diff --word-diff [<options>] [<commit>] [--] [<path>...]
Example 1: Comparing Working Directory Changes
To see word-level differences in your unstaged changes:
git diff --word-diff
Output:
This is a [-sample-]{+demonstration+} text.
Here, -sample- was removed and +demonstration+ was added.
Example 2: Comparing Staged Changes
If you want to check staged changes before committing:
git diff --word-diff --cached
Example 3: Comparing Between Commits
To see word differences between two commits:
git diff --word-diff commit1 commit2
Common Use Cases
1. Reviewing Documentation Changes
When editing Markdown or text files, small word changes matter. --word-diff helps avoid overlooking minor but important updates.
Example:
The [-quick-]{+fast+} brown fox jumps over the lazy dog.
2. Checking Code Comments and Strings
Sometimes, only a variable name or comment changes—--word-diff highlights these precisely.
Example in Python:
# This function [-calculates-]{+computes+} the sum
3. Comparing Configuration Files
For JSON, YAML, or .env files, word-level diff prevents misinterpreting line changes.
Example in JSON:
{
"version": "[-1.0.0-]{+2.0.0+}"
}
Tips and Tricks
While git diff --word-diff is already a powerful tool, there are several hidden tricks and advanced techniques to make it even more useful. Below are some pro tips to supercharge your Git diff workflow.
1. Use --word-diff=color for Better Readability
Instead of the default [-deleted-]{+added+} format, use colored output for easier reading:
git diff --word-diff=color
Example Output:
- Deleted words appear in red.
- Added words appear in green.
This is especially helpful in terminals that support ANSI colors.
2. Define Custom Word Boundaries with --word-diff-regex
By default, Git splits words by whitespace. But what if you want to treat camelCase variables or hyphenated-words as single units?
Example: Treat CamelCase as One Word
git diff --word-diff-regex='[a-zA-Z0-9_]+|[^[:space:]]'
Before:
get[-User-]{+Customer+}Data
After (with custom regex):
[-getUserData-]{+getCustomerData+}
Example: Treat Hyphenated Words as One
git diff --word-diff-regex='[[:alnum:]-]+|[^[:space:]]'
3. Combine --word-diff with --patience for Better Alignment
The --patience algorithm improves diff accuracy by avoiding false matches.
git diff --word-diff --patience
Best for:
- Refactored code where small changes shift line alignments.
- JSON/YAML files where indentation matters.
4. Ignore Whitespace Changes with -b or --ignore-space-change
If you only care about real content changes (not indentation or spaces), use:
git diff --word-diff -b
Example:
# Before (normal diff)
const value = [- getValue()-]{+getValue()+};
# After (`-b` flag)
const value = getValue(); # (No diff if only spacing changed)
5. Use git log -p --word-diff for Historical Word Diffs
Want to see word-level changes in commit history? Combine git log -p with --word-diff:
git log -p --word-diff
Example Output:
commit abc123
Author: John Doe <john@example.com>
Date: Mon Jan 1 12:00:00 2024
Update README
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
This project [-demonstrates-]{+shows+} how to use Git.
6. Compare Specific File Types Differently
Some files (like Markdown) benefit from word-diff, while others (like minified JS) don’t. Use .gitattributes to configure per-file behavior:
echo "*.md diff=word" >> .gitattributes
Now, git diff will automatically use --word-diff for .md files but keep line-diff for others.
7. Use --stat with Word Diff for a Summary
Want a quick summary of word changes (not just lines modified)?
git diff --word-diff --stat
Output:
README.md | 4 [-++--]{+----+}
(Shows that 4 words were changed.)
8. Create a Git Alias for Quick Word Diffs
Tired of typing --word-diff every time? Add an alias:
git config --global alias.wdiff "diff --word-diff"
Now just run:
git wdiff
9. Use --word-diff with Merge Conflicts
When resolving conflicts, sometimes only a few words differ—not entire lines. Use:
git checkout --conflict=diff3 --word-diff
This helps in 3-way merges where small wording changes cause conflicts.
Conclusion
git diff --word-diff is a powerful tool for tracking fine-grained changes in text files, making it invaluable for documentation, code reviews, and configuration management. By focusing on words instead of entire lines, you gain better clarity on modifications.
Next time you need to inspect small but critical changes, try --word-diff and see the difference!
Up Next in the Series: git hooks (pre-commit, pre-push) – Automate checks before commits/pushes
Daily advance GIT tips in your inbox---worth starting? Respond to my poll here🚀
For more useful and innovative tips and tricks, Let's connect on Medium
Top comments (0)