Bird
Raised Fist0
Gitdevops~20 mins

git add with patterns and directories - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Git Add Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What files are staged after running this command?
Given a directory with files:
  • src/app.js
  • src/utils.js
  • test/app.test.js
  • README.md

What files will be staged after running:
git add src/*.js
Asrc/app.js and src/utils.js
Bsrc/app.js only
Csrc/app.js, src/utils.js, and test/app.test.js
DAll .js files in the repo
Attempts:
2 left
💡 Hint
The pattern matches files only in the specified directory, not subdirectories.
💻 Command Output
intermediate
2:00remaining
What is the effect of this git add command?
Assuming the current directory contains:
  • docs/intro.md
  • docs/setup.md
  • docs/images/logo.png

What files will be staged after:
git add docs/*.md
ANo files staged, pattern is invalid
Bdocs/intro.md, docs/setup.md, and docs/images/logo.png
COnly docs/intro.md
Ddocs/intro.md and docs/setup.md
Attempts:
2 left
💡 Hint
The pattern '*.md' matches markdown files only in the specified directory.
Configuration
advanced
2:00remaining
How to stage all files recursively in a directory?
You want to stage all files inside the 'src' directory and all its subdirectories. Which command achieves this?
Agit add src/**/*.js
Bgit add src/*
Cgit add src/
Dgit add src/*.**
Attempts:
2 left
💡 Hint
Adding a directory stages all files inside it recursively.
Troubleshoot
advanced
2:00remaining
Why does this git add command not stage files in subdirectories?
You run:
git add logs/*.log
But files in 'logs/2024/' are not staged. Why?
AThe pattern '*.log' matches only files directly inside 'logs', not in subdirectories
BGit does not support adding files with patterns
CThe command needs sudo privileges to add files in subdirectories
DThe files in 'logs/2024/' are ignored by .gitignore
Attempts:
2 left
💡 Hint
Patterns without recursive wildcards do not match files in subfolders.
🔀 Workflow
expert
3:00remaining
Which command stages only .js files in all subdirectories of 'src'?
You want to stage all .js files inside 'src' and any nested folders. Which command works correctly?
Agit add src/*.js
Bgit add 'src/**/*.js'
Cgit add src/
Dgit add src/*/*.js
Attempts:
2 left
💡 Hint
Use double star '**' for recursive matching in supported shells.

Practice

(1/5)
1. What does the command git add src/ do?
easy
A. Removes the 'src' directory from the repository.
B. Stages only the 'src' directory itself, not its contents.
C. Commits changes in the 'src' directory immediately.
D. Stages all changes in the 'src' directory and its subdirectories.

Solution

  1. Step 1: Understand the command context

    The command git add src/ targets the directory named 'src'.
  2. Step 2: Know how git add works with directories

    Git stages all files and subdirectories inside 'src' recursively when adding a directory.
  3. Final Answer:

    Stages all changes in the 'src' directory and its subdirectories. -> Option D
  4. Quick Check:

    git add directory = stage all inside [OK]
Hint: Adding a directory stages all files inside it recursively [OK]
Common Mistakes:
  • Thinking it stages only the directory, not contents
  • Confusing add with commit
  • Assuming it deletes files
2. Which of the following is the correct command to stage all .txt files in the current directory using a pattern?
easy
A. git add txt.*
B. git add .txt*
C. git add *.txt
D. git add *txt

Solution

  1. Step 1: Understand wildcard usage in git add

    The asterisk (*) matches any characters, so *.txt matches all files ending with '.txt'.
  2. Step 2: Check each option's pattern

    git add *.txt correctly matches all '.txt' files. Others do not match the intended pattern.
  3. Final Answer:

    git add *.txt -> Option C
  4. Quick Check:

    Use * before extension to match all files [OK]
Hint: Use '*.ext' to add all files with that extension [OK]
Common Mistakes:
  • Placing * after extension instead of before
  • Using wrong order of characters in pattern
  • Confusing dot placement in patterns
3. Given the directory structure:
project/
  ├─ app.js
  ├─ README.md
  └─ docs/
      ├─ intro.md
      └─ setup.md

What files will be staged after running git add docs/*.md?
medium
A. Only docs/intro.md and docs/setup.md
B. All files in project including app.js and README.md
C. No files, command fails due to pattern
D. Only docs/setup.md

Solution

  1. Step 1: Analyze the pattern used

    The pattern docs/*.md matches all files ending with '.md' inside the 'docs' directory only.
  2. Step 2: Identify matching files

    Inside 'docs', 'intro.md' and 'setup.md' match. Files outside 'docs' are not matched.
  3. Final Answer:

    Only docs/intro.md and docs/setup.md -> Option A
  4. Quick Check:

    Pattern matches files only inside specified directory [OK]
Hint: Pattern 'dir/*.ext' adds matching files only inside that directory [OK]
Common Mistakes:
  • Assuming files outside 'docs' are staged
  • Thinking pattern matches recursively
  • Believing command fails if pattern matches multiple files
4. You run git add docs/*.md but only docs/intro.md is staged, not docs/setup.md. What is the most likely cause?
medium
A. You need to add files one by one manually.
B. The file docs/setup.md is ignored by .gitignore.
C. Git add cannot stage files in subdirectories.
D. The pattern '*.md' only matches one file at a time.

Solution

  1. Step 1: Understand why some files are not staged

    If a file is ignored by .gitignore, git add will skip it even if the pattern matches.
  2. Step 2: Check other options for correctness

    Patterns can match multiple files; git add works recursively for directories; manual adding is not required.
  3. Final Answer:

    The file docs/setup.md is ignored by .gitignore. -> Option B
  4. Quick Check:

    Ignored files are skipped by git add [OK]
Hint: Check .gitignore if some matching files are not staged [OK]
Common Mistakes:
  • Believing patterns match only one file
  • Thinking git add can't stage multiple files
  • Assuming manual add is always needed
5. You want to stage all JavaScript files in the 'src' directory and all Markdown files in the 'docs' directory with one command. Which command achieves this?
hard
A. git add src/*.js docs/*.md
B. git add 'src/*.js docs/*.md'
C. git add src/*.js && git add docs/*.md
D. git add src/ docs/ *.js *.md

Solution

  1. Step 1: Understand how to add multiple patterns in one command

    Git add accepts multiple paths or patterns separated by spaces without quotes.
  2. Step 2: Evaluate each option

    git add src/*.js docs/*.md correctly lists both patterns separated by space. git add 'src/*.js docs/*.md' quotes patterns unnecessarily, which may cause shell to treat them literally. git add src/*.js && git add docs/*.md runs two commands, not one. git add src/ docs/ *.js *.md mixes directories and patterns incorrectly.
  3. Final Answer:

    git add src/*.js docs/*.md -> Option A
  4. Quick Check:

    Multiple patterns separated by space work in one git add [OK]
Hint: List multiple patterns separated by spaces in one git add command [OK]
Common Mistakes:
  • Using quotes that prevent shell expansion
  • Trying to combine commands with && instead of one command
  • Mixing directories and patterns incorrectly