Bird
Raised Fist0
Gitdevops~5 mins

Updating submodules in Git - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Git submodule?
A Git submodule is a repository embedded inside another Git repository. It lets you keep a separate project inside your main project, like a folder that tracks its own history.
Click to reveal answer
beginner
Which command updates all submodules to the commit specified in the main repository?
git submodule update
Click to reveal answer
beginner
How do you initialize submodules after cloning a repository?
Use git submodule init to set up local configuration, then git submodule update to fetch the submodule content.
Click to reveal answer
intermediate
What does the command 'git submodule update --remote' do?
It fetches the latest changes from the remote repository of each submodule and updates the submodule to the latest commit on its tracked branch.
Click to reveal answer
beginner
Why should you run 'git submodule update' after pulling changes in the main repository?
Because the main repository may have updated the submodule commit pointer, so you need to update your submodules to match the new commit.
Click to reveal answer
What command initializes submodules after cloning a repository?
Agit submodule fetch
Bgit submodule update --remote
Cgit clone --submodules
Dgit submodule init
Which command updates submodules to the commit recorded in the main repository?
Agit submodule update
Bgit submodule init
Cgit submodule sync
Dgit submodule status
How do you update submodules to the latest commit on their remote branches?
Agit submodule update
Bgit submodule init
Cgit submodule update --remote
Dgit submodule fetch
What happens if you forget to update submodules after pulling changes?
ASubmodules automatically update
BSubmodules stay at old commits and may cause inconsistencies
CGit deletes the submodules
DNothing, submodules are independent
Which command clones a repository and initializes submodules in one step?
Agit clone --recurse-submodules
Bgit clone --submodules
Cgit clone --init-submodules
Dgit clone --update-submodules
Explain the steps to properly update submodules after pulling changes in the main repository.
Think about syncing submodules with the main repo's recorded commits.
You got /3 concepts.
    Describe the difference between 'git submodule update' and 'git submodule update --remote'.
    One updates to a fixed commit, the other to the latest remote commit.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the command git submodule update --init --recursive do in a Git project?
      easy
      A. It deletes all submodules from the project.
      B. It commits changes in all submodules automatically.
      C. It initializes and updates all submodules recursively after cloning the main project.
      D. It creates new submodules inside the main project.

      Solution

      1. Step 1: Understand submodule initialization

        The --init option initializes submodules that are not yet initialized in the cloned project.
      2. Step 2: Understand recursive update

        The --recursive option ensures that nested submodules inside submodules are also initialized and updated.
      3. Final Answer:

        It initializes and updates all submodules recursively after cloning the main project. -> Option C
      4. Quick Check:

        Initialize + recursive update = It initializes and updates all submodules recursively after cloning the main project. [OK]
      Hint: Init and recursive flags together set up all submodules after clone [OK]
      Common Mistakes:
      • Thinking it deletes submodules
      • Assuming it commits changes automatically
      • Confusing initialization with creation of submodules
      2. Which of the following is the correct syntax to update submodules to their latest remote commits?
      easy
      A. git submodule update --remote
      B. git submodule update --fetch --all
      C. git submodule update --recursive --commit
      D. git submodule update --init

      Solution

      1. Step 1: Identify the command for updating to latest remote commits

        The --remote option tells Git to fetch and update submodules to the latest commit on their remote branches.
      2. Step 2: Check other options for correctness

        --init only initializes, --recursive --commit is invalid syntax, and --fetch --all is not a valid submodule update option.
      3. Final Answer:

        git submodule update --remote -> Option A
      4. Quick Check:

        Update submodules to latest remote = --remote [OK]
      Hint: Use --remote to pull latest submodule commits [OK]
      Common Mistakes:
      • Using --init instead of --remote
      • Adding invalid flags like --commit
      • Confusing fetch with update options
      3. After cloning a repository with submodules, you run these commands:
      git submodule update --init
      cd submodule_dir
      git log -1 --oneline
      What will the git log -1 --oneline inside the submodule show?
      medium
      A. The latest commit from the submodule's remote repository.
      B. The commit that the main project references for the submodule.
      C. An error because the submodule is not initialized.
      D. The commit history of the main project.

      Solution

      1. Step 1: Understand what git submodule update --init does

        This command initializes the submodule and checks out the commit that the main project references, not necessarily the latest remote commit.
      2. Step 2: Analyze the git log -1 --oneline output inside submodule

        This shows the latest commit checked out in the submodule directory, which matches the main project's recorded commit, not the remote HEAD.
      3. Final Answer:

        The commit that the main project references for the submodule. -> Option B
      4. Quick Check:

        Submodule update checks out main project commit, not latest remote [OK]
      Hint: Submodule update checks out recorded commit, not latest remote [OK]
      Common Mistakes:
      • Assuming submodule auto-updates to latest remote commit
      • Expecting error after init command
      • Confusing main project and submodule commit logs
      4. You ran git submodule update --remote but the submodule did not update to the latest commit. What is a likely cause?
      medium
      A. The submodule directory is empty.
      B. You forgot to clone the main repository first.
      C. The main project has no submodules configured.
      D. The submodule's remote branch is not set or tracking is missing.

      Solution

      1. Step 1: Understand the role of remote tracking in submodules

        The --remote option updates submodules by fetching from their configured remote branch. If this branch is not set, update won't move the commit.
      2. Step 2: Check other options for relevance

        Cloning the main repo is prerequisite but unrelated to this issue; no submodules means no update; empty directory usually means uninitialized submodule.
      3. Final Answer:

        The submodule's remote branch is not set or tracking is missing. -> Option D
      4. Quick Check:

        Remote branch missing = no update with --remote [OK]
      Hint: Ensure submodule remote branch is set for --remote updates [OK]
      Common Mistakes:
      • Ignoring remote branch configuration
      • Assuming cloning main repo fixes submodule update
      • Confusing empty directory with update failure
      5. You want to clone a repository with multiple nested submodules and ensure all submodules and their nested submodules are initialized and updated to the commits recorded in the main project. Which command should you run immediately after cloning?
      hard
      A. git submodule update --init --recursive
      B. git submodule update --remote --recursive
      C. git clone --recurse-submodules --remote
      D. git submodule init && git submodule update

      Solution

      1. Step 1: Understand cloning with submodules

        After cloning, submodules are not initialized or updated by default. The --init flag initializes them.
      2. Step 2: Ensure nested submodules are handled

        The --recursive flag ensures all nested submodules are also initialized and updated to the recorded commits.
      3. Step 3: Differentiate from --remote option

        --remote updates submodules to latest remote commits, not the commits recorded in the main project, so it's not suitable here.
      4. Final Answer:

        git submodule update --init --recursive -> Option A
      5. Quick Check:

        Init + recursive updates recorded commits after clone [OK]
      Hint: Use --init and --recursive to set all submodules after clone [OK]
      Common Mistakes:
      • Using --remote instead of --init for recorded commits
      • Forgetting recursive flag for nested submodules
      • Trying to combine clone and remote flags incorrectly
      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