What does git diff –relative do, and how might it be useful?

The git diff --relative command is a version of the standard git diff command, with a small but sometimes critical difference. Before delving into the specifics of git diff --relative, it’s essential to understand what git diff does.

git diff is a command that shows the changes between different commits, or between the working directory and the index. It displays the differences in the contents of files, allowing developers to track modifications, additions, and deletions to their codebase.

So, what does the --relative option add to this?

The --relative option, when used with git diff, displays differences in a manner relative to a specified subdirectory. It modifies the output of git diff to only include changes that occur in the given subdirectory. If you’re working in a large project with multiple directories and subdirectories, this feature can be a lifesaver.

Let’s understand it through an example. If you’re inside a Git repository and your directory structure looks like this:

/my-repo
  /dir1
    /file1
    /file2
  /dir2
    /file3
    /file4

If you’re currently in /my-repo and you run git diff, it will show the differences across all files in the repository.

However, if you run git diff --relative=dir1, it will only show the differences in files within dir1, namely file1 and file2. It will ignore any changes in dir2.

This ability is useful in several situations, especially when you’re working in a large repository or a monorepo, where you only care about changes in a specific part of the codebase. By using git diff --relative, you can focus on the part of the repository that is currently relevant to you, and avoid being overwhelmed by changes in other parts of the codebase. This focus can significantly improve your productivity and reduce the complexity of managing your changes.