Steps to Update a Submodule
Step 1: Initialize and Update the Submodule
If you’ve just cloned a repository containing submodules, you need to initialize and update them first:
git submodule update --init --recursive
This command initializes, fetches, and checks out the submodule’s content.
Step 2: Fetch the Latest Changes in the Submodule
Navigate to the submodule directory:
cd path/to/submodule
Then, fetch the latest changes from the remote repository:
git fetch
This command updates the submodule with the latest changes from its remote repository.
Step 3: Checkout the Desired Commit
After fetching the latest changes, you need to checkout the desired commit or branch. For instance, to checkout the latest commit on the main branch:
git checkout main
Alternatively, you can checkout a specific commit:
git checkout <commit-hash>
Replace `<commit-hash>` with the actual hash of the commit you want to checkout.
Step 4: Pull the Latest Changes
To ensure your submodule is up to date, pull the latest changes:
git pull origin main
This command pulls the latest changes from the specified branch.
Step 5: Update the Parent Repository
After updating the submodule, you need to update the reference in the parent repository to point to the new commit. Navigate back to the root of your main repository:
cd ../..
Then, add and commit the changes:
git add path/to/submodule
git commit -m "Updated submodule to latest commit"
This updates the reference of the submodule to the latest commit you checked out and pulled.
Step 6: Push the Changes to the Remote Repository
Finally, push the changes to your remote repository to keep it in sync:
git push origin main
This command pushes your changes, including the updated submodule reference, to the remote repository.
Example
Let’s walk through a practical example. Suppose you have a repository with a submodule located at `libs/my-submodule` and you want to update it to the latest commit on its main branch.
Step 1: Initialize and Update the Submodule (if you haven’t already):
git submodule update --init --recursive
Step 2. Navigate to the Submodule Directory:
cd libs/my-submodule
Step 3: Fetch the Latest Changes:
git fetch
Step 4: Checkout the Latest Commit:
git checkout main
Step 5: Pull the Latest Changes:
git pull origin main
Step 6. Navigate Back to the Parent Repository:
cd ../..
Step 7: Update the Submodule Reference*
git add libs/my-submodule
git commit -m “Updated my-submodule to latest commit”
Step 8: Push the Changes to the Remote Repository:
git push origin main
Updating a Submodule in Git
Git submodules are a powerful feature that allows you to include and manage external repositories within your own Git project. This is particularly useful for managing dependencies or handling third-party libraries. However, keeping these submodules up to date can be a bit tricky. In this article, we will see the process of updating a submodule in Git.