git
version control
diff
commit comparison
branch

How do I diff the same file between two different commits on the same branch?

Master System Design with Codemia

Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.

To diff the same file across two different commits on the same branch in a Git repository, is a fundamental task that comes in handy during code reviews, bug tracking, and understanding how a particular part of the codebase evolved over time. Below, we delve into how to effectively perform this task using Git commands and explore additional related concepts.

Understanding Git Diffs

Git is a distributed version control system that allows users to track changes in files and coordinate work on those files among multiple people. One of its core functionalities is the diff feature, which can be used to compare changes between various commits, branches, or working trees.

Command for Diffing a File

To compare the same file across two different commits in Git, you use the git diff command. The syntax to compare a specific file between two commits is:

bash
git diff <commit1> <commit2> -- <file>
  • <commit1> and <commit2> are the commit hashes or references you want to compare.
  • <file> is the path to the specific file you wish to diff.

Example Scenario

Imagine you have a Git repository with a file named app.js, and you want to see the differences in this file between two commits identified by their hashes abc1234 and def5678.

You would execute:

bash
git diff abc1234 def5678 -- app.js

This command will output the differences found in app.js between the two specified commits.

Working with Shortened Hashes

Git allows commit hashes to be abbreviated. Typically, the first 7 characters are enough to uniquely identify a commit. If you are using shortened hashes, the command still works:

bash
git diff abc123 def567 -- app.js

Viewing the Commit History

Before performing a diff, you might want to identify the commit hashes on the branch by using:

bash
git log --oneline

This command will list all commits in the branch, showing their abbreviated commit hashes and commit messages. This makes it easier to pick the two specific commits you are interested in.

Key Considerations

  • Ensure you are working on the correct branch where the file and commits exist.
  • The file path must be correctly specified relative to the repository root.
  • When dealing with large diff outputs, piping the results to a pager tool might be useful. For instance, use | less:
bash
  git diff abc123 def567 -- app.js | less

Practical Table

Here's a summary table for the git diff command:

TerminologyExplanation
Commit HashUnique identifier for a commit.
File PathRelative path to the file in the repository.
Git DiffCommand to compare differences.
Usagegit diff <commit1> <commit2> -- <file>
Example Commandgit diff abc123 def567 -- app.js
Oneline Loggit log --oneline to see commits.

Additional Details

Diffing with Branch References

Instead of using commit hashes, you can use branch names or tags if they point to the desired commits:

bash
git diff branch1 branch2 -- app.js

This command would compare the file as it appears in the latest commits of branch1 and branch2.

Advanced Usage

For more complex diff operations, you can customize the git diff command with various options:

  • --color: Forces colored output even when writing to a non-terminal.
  • -w: Ignores whitespace changes.
  • --stat: Provides a summary of changes.

For instance, to ignore whitespace changes, the command would be:

bash
git diff -w abc123 def567 -- app.js

Git GUI Tools

If command-line workflows are not your preference, consider using GUI tools like GitKraken, Sourcetree, or even built-in tools in IDEs like Visual Studio Code, which offer visual diff representations.

By understanding and utilizing the Git diff feature, you can effectively track file changes between different commits and improve your development workflow.


Course illustration
Course illustration

All Rights Reserved.