Bird
Raised Fist0
Gitdevops~20 mins

Clean vs dirty working directory in Git - Practice Questions

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 Working Directory Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Identify clean working directory status
You run git status in a repository. Which output indicates a clean working directory?
AOn branch main\nYour branch is ahead of 'origin/main' by 1 commit
BOn branch main\nChanges not staged for commit:\n modified: file.txt
COn branch main\nUntracked files:\n newfile.txt
DOn branch main\nnothing to commit, working tree clean
Attempts:
2 left
💡 Hint
Look for the phrase that says no changes are pending.
🧠 Conceptual
intermediate
2:00remaining
Difference between staged and unstaged changes
Which statement correctly describes the difference between staged and unstaged changes in Git?
AStaged changes are files deleted from the repository; unstaged changes are new files only.
BUnstaged changes are ready to be committed; staged changes are ignored by Git.
CStaged changes are ready to be committed; unstaged changes are modified files not yet added to the staging area.
DThere is no difference; both terms mean the same in Git.
Attempts:
2 left
💡 Hint
Think about what 'git add' does.
Troubleshoot
advanced
2:00remaining
Detecting dirty working directory with a script
You want to write a shell script to check if the Git working directory is dirty (has unstaged or staged changes). Which command correctly returns a non-empty output only if the directory is dirty?
Agit diff --name-only || git diff --cached --name-only
Bgit diff --quiet || git diff --cached --quiet
Cgit diff --quiet && git diff --cached --quiet
Dgit diff --name-only && git diff --cached --name-only
Attempts:
2 left
💡 Hint
Use commands that list changed files and combine with OR to detect any changes.
🔀 Workflow
advanced
2:00remaining
Handling dirty working directory before switching branches
You want to switch branches but your working directory is dirty. What is the safest way to switch branches without losing your changes?
ARun 'git stash' to save changes, switch branch, then 'git stash pop' to reapply changes.
BRun 'git reset --hard' to discard changes, then switch branch.
CSwitch branch directly with 'git checkout' ignoring changes.
DDelete the modified files manually, then switch branch.
Attempts:
2 left
💡 Hint
Think about saving your work temporarily.
Best Practice
expert
2:00remaining
Best practice for committing changes in a dirty working directory
You have multiple unrelated changes in your dirty working directory. What is the best practice to commit them properly?
ACreate a new branch for each change without staging selectively.
BUse 'git add -p' to stage changes interactively and commit logically separated changes in multiple commits.
CDelete unrelated changes and commit only one feature at a time.
DCommit all changes at once with a single message describing everything.
Attempts:
2 left
💡 Hint
Think about how to organize commits clearly.

Practice

(1/5)
1. What does it mean when your Git working directory is described as clean?
easy
A. There are conflicts from a merge.
B. There are untracked files present.
C. There are changes staged but not committed.
D. There are no changes to commit; all files are saved in Git.

Solution

  1. Step 1: Understand the meaning of a clean working directory

    A clean working directory means no changes are pending to be committed or staged.
  2. Step 2: Compare with other states

    Untracked files, staged changes, or conflicts mean the directory is dirty, not clean.
  3. Final Answer:

    There are no changes to commit; all files are saved in Git. -> Option D
  4. Quick Check:

    Clean working directory = no uncommitted changes [OK]
Hint: Clean means no changes to commit or stage [OK]
Common Mistakes:
  • Confusing staged changes with clean state
  • Thinking untracked files mean clean
  • Assuming conflicts mean clean
2. Which Git command correctly shows the current state of your working directory?
easy
A. git push origin main
B. git commit -m "status"
C. git status
D. git checkout

Solution

  1. Step 1: Identify the command to check working directory state

    The command git status shows staged, unstaged, and untracked changes.
  2. Step 2: Eliminate other commands

    git commit saves changes, git push uploads commits, git checkout switches branches or files.
  3. Final Answer:

    git status -> Option C
  4. Quick Check:

    Check working directory state = git status [OK]
Hint: Use 'git status' to see working directory changes [OK]
Common Mistakes:
  • Using git commit to check status
  • Confusing git push with status check
  • Using git checkout incorrectly
3. You run git status and see:
Changes not staged for commit:
modified: app.js

What is the state of your working directory?
medium
A. Dirty working directory with unstaged changes
B. Dirty working directory with staged changes
C. Clean working directory
D. Detached HEAD state

Solution

  1. Step 1: Interpret the git status output

    The message "Changes not staged for commit" means files are modified but not added to staging.
  2. Step 2: Determine working directory state

    Unstaged changes mean the directory is dirty, not clean, and changes are not staged.
  3. Final Answer:

    Dirty working directory with unstaged changes -> Option A
  4. Quick Check:

    Unstaged changes = dirty directory [OK]
Hint: Unstaged changes mean dirty directory [OK]
Common Mistakes:
  • Confusing unstaged with staged changes
  • Assuming clean when files are modified
  • Mixing detached HEAD with working directory state
4. You see this output after running git status:
On branch main
Changes to be committed:
modified: index.html

But you want to check if your working directory is clean. What should you do?
medium
A. Run git reset HEAD index.html to unstage changes
B. Run git commit to save changes
C. Run git add index.html again
D. Run git checkout index.html to stage changes

Solution

  1. Step 1: Understand the meaning of staged changes

    "Changes to be committed" means files are staged but not committed, so directory is dirty.
  2. Step 2: Unstage changes to check clean state

    Running git reset HEAD index.html unstages the file, showing if working directory has unstaged changes.
  3. Final Answer:

    Run git reset HEAD index.html to unstage changes -> Option A
  4. Quick Check:

    Unstage changes to check clean state [OK]
Hint: Unstage files with git reset HEAD to check clean state [OK]
Common Mistakes:
  • Adding files again instead of unstaging
  • Committing without checking unstaged changes
  • Using git checkout to stage files (wrong)
5. You modified two files: app.py and README.md. You staged app.py but not README.md. What will git status show?
hard
A. No changes to commit, working directory clean
B. Changes to be committed: app.py; Changes not staged for commit: README.md
C. Changes not staged for commit: app.py and README.md
D. Untracked files: app.py and README.md

Solution

  1. Step 1: Identify staged and unstaged files

    app.py is staged, so it appears under "Changes to be committed".
  2. Step 2: Identify unstaged files

    README.md is modified but not staged, so it appears under "Changes not staged for commit".
  3. Final Answer:

    Changes to be committed: app.py; Changes not staged for commit: README.md -> Option B
  4. Quick Check:

    Staged vs unstaged files shown separately [OK]
Hint: Staged files show as 'to be committed', unstaged as 'not staged' [OK]
Common Mistakes:
  • Assuming all modified files are staged
  • Confusing untracked with modified files
  • Thinking working directory is clean with staged changes