Git submodules cheatsheet

Read on Russian

List of useful commands to work with submodules.

Add submodule

git submodule add*user*/*repo* path/to/submodule/directory

For using private repository as a submodule:

git submodule add*user*/*repo*.git path/to/submodule/directory


git submodule add editorjs

You will see changes in .gitmodules file and submodule's directory. Commit changes in both files.

Init submodules

After cloning a repository with submodules you need to initialize them. Otherwise you will see empty directories in submodules places.

Git will download submodules recursively.

git submodule update --init --recursive

Pull updates

Pull submodules by commited state.

git submodule update --recursive

Get the latest updates for remote branches

git submodule update --recursive --remote

Remove submodule

1. Delete the relevant section from the .gitmodules file.

-[submodule "editorjs"] - path = editorjs - url =

2. Stage the .gitmodules changes: git add .gitmodules.

3. Delete the relevant section from .git/config.

[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master -[submodule "editorjs"] - active = true - url =

4. Run git rm --cached path_to_submodule (no trailing slash).

5. Run rm -rf .git/modules/path_to_submodule (no trailing slash).

6. Delete the now untracked submodule files rm -rf path_to_submodule.

7. Commit changes: git commit -am "Remove submodule".

Working with submodules

You can work with any submodule via your git client (as a regular repository).

For example. Any changes inside submodule will be shown as dirty state.

Add submodule's directory as a local repository.

And you will see changes, commit them and checkout branches.