Bird
Raised Fist0
Gitdevops~10 mins

Removing submodules in Git - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Removing submodules
Identify submodule to remove
↓
Remove submodule entry from .gitmodules
↓
Remove submodule directory from git index
↓
Delete submodule physical directory
↓
Commit changes to main repo
↓
Remove submodule config from .git/config
↓
Submodule fully removed
This flow shows the step-by-step process to cleanly remove a git submodule from a repository.
Execution Sample
Git
git submodule deinit -f path/to/submodule
rm -rf .git/modules/path/to/submodule
git rm -f path/to/submodule
rm -rf path/to/submodule
git commit -m "Remove submodule"
Commands to deinitialize, remove, and commit removal of a git submodule.
Process Table
StepCommandActionResult
1git submodule deinit -f path/to/submoduleUnregister submodule from git configSubmodule deinitialized, no longer tracked in config
2rm -rf .git/modules/path/to/submoduleDelete submodule's git data directorySubmodule git data removed from .git/modules
3git rm -f path/to/submoduleRemove submodule directory from git indexSubmodule directory staged for removal
4rm -rf path/to/submoduleDelete submodule physical directorySubmodule files deleted from working directory
5git commit -m "Remove submodule"Commit removal changesCommit created removing submodule from repo
💡 Submodule fully removed after commit; no traces remain in config or working directory.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
.gitmodulesContains submodule entryUnchangedUnchangedSubmodule entry removedSubmodule entry removedSubmodule entry removed
.git/configContains submodule configSubmodule config removedSubmodule config removedSubmodule config removedSubmodule config removedSubmodule config removed
Submodule directoryExists with filesExistsExistsRemoved from indexDeletedDeleted
.git/modules/path/to/submoduleExistsExistsDeletedDeletedDeletedDeleted
Key Moments - 3 Insights
Why do we run 'git submodule deinit' before removing files?
Because 'git submodule deinit' unregisters the submodule from git's config, preventing git from tracking it before we delete files. See execution_table step 1.
Why must we delete the .git/modules/path/to/submodule directory?
This directory holds the submodule's git data. If not deleted, git still keeps submodule info internally. See execution_table step 2.
Why do we run 'git rm' instead of just deleting the submodule folder?
'git rm' removes the submodule from git's index so git knows it's deleted. Just deleting files won't update git's tracking. See execution_table step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what happens at step 2?
ASubmodule directory is deleted from working folder
BSubmodule is committed as removed
CSubmodule git data directory is deleted
DSubmodule is deinitialized in config
💡 Hint
Check the 'Action' and 'Result' columns for step 2 in the execution_table.
According to variable_tracker, when is the submodule directory removed from git index?
AAfter Step 3
BAfter Step 2
CAfter Step 1
DAfter Step 4
💡 Hint
Look at the 'Submodule directory' row and see when it changes to 'Removed from index'.
If you skip deleting .git/modules/path/to/submodule, what remains?
ASubmodule entry remains in .gitmodules
BSubmodule git data remains internally
CSubmodule files remain in working directory
DSubmodule is fully removed
💡 Hint
Refer to variable_tracker row for '.git/modules/path/to/submodule' after Step 2.
Concept Snapshot
Removing git submodules:
1. Run 'git submodule deinit -f <path>' to unregister.
2. Delete submodule git data: 'rm -rf .git/modules/<path>'.
3. Remove submodule from index: 'git rm -f <path>'.
4. Delete submodule files: 'rm -rf <path>'.
5. Commit changes to finalize removal.
Full Transcript
To remove a git submodule, first deinitialize it with 'git submodule deinit -f' to unregister it from git config. Then delete the submodule's git data directory inside .git/modules. Next, remove the submodule directory from git's index using 'git rm -f'. After that, delete the physical submodule folder from your working directory. Finally, commit these changes to your repository. This process ensures the submodule is fully removed from tracking and files.

Practice

(1/5)
1. What is the first step to remove a Git submodule from your project?
easy
A. Commit the changes immediately
B. Delete the submodule folder manually
C. Unregister the submodule using git submodule deinit
D. Run git rm --cached on the main repository

Solution

  1. Step 1: Unregister the submodule

    Use git submodule deinit <path> to unregister the submodule from Git's configuration.
  2. Step 2: Remove submodule files and commit

    After unregistering, delete the submodule folder and commit the changes to keep the project clean.
  3. Final Answer:

    Unregister the submodule using git submodule deinit -> Option C
  4. Quick Check:

    First step is unregistering submodule [OK]
Hint: Always unregister submodule before deleting files [OK]
Common Mistakes:
  • Deleting folder before unregistering causes errors
  • Committing before unregistering submodule
  • Skipping unregister step
2. Which command correctly removes a submodule's cached entry from Git's index?
easy
A. git rm <submodule_path>
B. git delete submodule <submodule_path>
C. git submodule remove <submodule_path>
D. git rm --cached <submodule_path>

Solution

  1. Step 1: Remove cached submodule entry

    Use git rm --cached <submodule_path> to remove the submodule from Git's index without deleting files immediately.
  2. Step 2: Delete submodule folder and commit

    After removing cached entry, delete the folder manually and commit the changes.
  3. Final Answer:

    git rm --cached <submodule_path> -> Option D
  4. Quick Check:

    Remove cached entry with git rm --cached [OK]
Hint: Use --cached to remove from index but keep files temporarily [OK]
Common Mistakes:
  • Using git rm without --cached deletes files immediately
  • Using non-existent git submodule remove command
  • Trying git delete submodule which is invalid
3. Given these commands run in order, what is the final state of the submodule folder?
git submodule deinit mysub
rm -rf .git/modules/mysub
git rm --cached mysub
rm -rf mysub
git commit -m "Remove submodule"
medium
A. The submodule folder and Git data are fully removed
B. The submodule folder remains but is untracked
C. Only Git data is removed, folder remains
D. Submodule is still registered and tracked

Solution

  1. Step 1: Unregister and remove Git data

    git submodule deinit mysub unregisters the submodule, and rm -rf .git/modules/mysub deletes its Git data.
  2. Step 2: Remove cached index and folder, then commit

    git rm --cached mysub removes it from Git index, rm -rf mysub deletes the folder, and commit saves changes.
  3. Final Answer:

    The submodule folder and Git data are fully removed -> Option A
  4. Quick Check:

    All steps done means full removal [OK]
Hint: Deinit, remove Git data, rm cached, delete folder, commit [OK]
Common Mistakes:
  • Forgetting to delete .git/modules data
  • Not committing after removal
  • Deleting folder before unregistering
4. You ran rm -rf mysub before git submodule deinit mysub. What problem might occur?
medium
A. Git still tracks the submodule and shows errors on next fetch
B. The submodule folder is restored automatically
C. Git removes the submodule automatically without errors
D. No problem, this is the correct order

Solution

  1. Step 1: Understand order importance

    Deleting the folder before unregistering leaves Git still tracking the submodule path.
  2. Step 2: Resulting error state

    Git will show errors or warnings because the submodule is missing but still registered.
  3. Final Answer:

    Git still tracks the submodule and shows errors on next fetch -> Option A
  4. Quick Check:

    Delete folder before deinit causes tracking errors [OK]
Hint: Always deinit before deleting submodule folder [OK]
Common Mistakes:
  • Deleting folder first then deinit
  • Ignoring Git errors after removal
  • Assuming folder deletion unregisters submodule
5. You want to completely remove a submodule named libs/toolkit from your project. Which sequence of commands correctly removes it and cleans all related data?
hard
A. git rm libs/toolkit; rm -rf libs/toolkit; git commit -m "Remove submodule"
B. git submodule deinit libs/toolkit; rm -rf .git/modules/libs/toolkit; git rm --cached libs/toolkit; rm -rf libs/toolkit; git commit -m "Remove submodule"
C. rm -rf libs/toolkit; git submodule deinit libs/toolkit; git commit -m "Remove submodule"
D. git submodule remove libs/toolkit; git commit -m "Remove submodule"

Solution

  1. Step 1: Unregister and remove Git submodule data

    Run git submodule deinit libs/toolkit to unregister, then delete Git metadata with rm -rf .git/modules/libs/toolkit.
  2. Step 2: Remove cached index and folder, then commit

    Use git rm --cached libs/toolkit to remove from index, delete the folder manually, and commit changes.
  3. Final Answer:

    git submodule deinit libs/toolkit; rm -rf .git/modules/libs/toolkit; git rm --cached libs/toolkit; rm -rf libs/toolkit; git commit -m "Remove submodule" -> Option B
  4. Quick Check:

    Full removal requires unregister, delete Git data, rm cached, delete folder, commit [OK]
Hint: Deinit, delete .git/modules, rm cached, delete folder, commit [OK]
Common Mistakes:
  • Skipping removal of .git/modules data
  • Using non-existent git submodule remove command
  • Deleting folder before unregistering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard