Add, Update, and Remove Git Submodule

Git submodules are a powerful feature that allows you to incorporate external repositories as subdirectories within your project. This enables code reuse from other repositories while maintaining independent version control for both the parent project and submodules.

In this article, we will explore how to add, update, and remove Git submodules with practical examples and best practices for effective submodule management.

Adding a Git Submodule

To add a new submodule to your project, use the git submodule add command. This command takes the URL of the submodule repository and the local path where it should be placed.

git submodule add https://github.com/jquery/jquery.git libs/jquery

This command will:

  • Clone the jQuery repository into the libs/jquery directory

  • Create a .gitmodules file that tracks submodule information

  • Stage the submodule for commit

After adding the submodule, commit the changes:

git commit -m "Add jQuery submodule"

Updating a Git Submodule

Submodules can be updated to fetch the latest changes from their respective repositories. Use the git submodule update command with various options:

Update to Latest Commit

git submodule update --remote libs/jquery

Initialize and Update All Submodules

git submodule update --init --recursive

Update All Submodules to Latest

git submodule update --remote --merge

The --remote flag fetches the latest commit from the submodule's default branch, while --merge merges changes into the current submodule branch.

Removing a Git Submodule

Removing a submodule requires multiple steps to completely clean up all references:

# Deinitialize the submodule
git submodule deinit libs/jquery

# Remove the submodule from the repository
git rm libs/jquery

# Commit the changes
git commit -m "Remove jQuery submodule"

For complete removal, you may also need to manually delete the submodule's entry from .git/modules/:

rm -rf .git/modules/libs/jquery

Advanced Submodule Operations

Working with Specific Branches

You can specify a particular branch when adding a submodule:

git submodule add --branch development https://github.com/example/repo.git libs/repo

Bulk Operations on Multiple Submodules

Execute commands across all submodules using git submodule foreach:

# Stash changes in all submodules
git submodule foreach 'git stash'

# Pull latest changes in all submodules
git submodule foreach 'git pull origin main'

Common Submodule Issues

Issue Solution
Submodules not initialized after clone git submodule update --init --recursive
Submodule showing as modified git submodule update --remote
Missing submodule files git submodule sync && git submodule update
Detached HEAD in submodule Navigate to submodule and git checkout main

Best Practices

  • Pin to specific commits Use specific commit hashes instead of branch references for stable builds

  • Document submodule purposes Maintain clear documentation about why each submodule is needed

  • Regular updates Keep submodules updated to benefit from security patches and improvements

  • Team coordination Ensure all team members understand submodule workflow and update procedures

Conclusion

Git submodules provide an effective way to manage external dependencies and share code across projects. Understanding the proper commands for adding, updating, and removing submodules is essential for maintaining clean and organized repositories. While submodules can introduce complexity, following best practices ensures smooth collaboration and dependency management.

Updated on: 2026-03-17T09:01:38+05:30

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements