How can git diff –submodule be used to inspect changes in submodules?

To understand how git diff --submodule can be used to inspect changes in submodules, it’s important to first understand what Git submodules are.

In Git, a submodule is like a Git repository embedded inside another Git repository. This can be very useful when you want to include external code, libraries, or other resources into your project. It allows you to keep your commits separate from the commits of the external resources.

Now, to inspect changes in these submodules, Git provides a special command git diff --submodule.

Let’s start with the basic usage:

cssCopy codegit diff --submodule

This command will show a diff that includes your submodules changes. By default, it just shows which commit the submodule is pointing at.

However, this default output may not be as helpful since it doesn’t tell you what has changed inside the submodule. Git offers a few more options for --submodule to provide more meaningful output.

  1. --submodule=log or --submodule=diff: These options show an overview of changes for all modified submodules.
  • log will show an overview of commits for all modified submodules.
  • diff will output a diff for each submodule along with the commit message of what changed in the submodule.


bashCopy codegit diff --submodule=log


cssCopy codegit diff --submodule=diff
  1. You can also use the git diff command to compare between specific commits, branches, or tags:
phpCopy codegit diff --submodule=diff <commit1>..<commit2>

This will show you a diff, including changes in submodules, between the two specified commits.

Note: The diff output for submodules is not included if you use the command git diff <commit1>..<commit2> without --submodule=diff.

Remember, when working with Git submodules, always pay attention to whether you’re committing in the main repository or inside a submodule, since they are effectively separate repositories.

In conclusion, the git diff --submodule command is a powerful tool that helps you keep track of changes in your Git submodules. The log and diff options provide a detailed view of changes and allow you to manage your project and its submodules effectively.