git clean — Remove Untracked
git clean ka delete permanent hai — koi undo nahi, koi recycle bin nahi. -n pehle, hamesha.
git clean removes UNTRACKED files and directories from your working directory. These are files Git does not know about — never staged, never committed, not in any snapshot.
Untracked means the file exists on disk but Git has zero record of it. It was never git added, never committed. Git does not protect these files because Git does not know they exist.
This is a DESTRUCTIVE operation — deleted files are GONE FOREVER. No reflog. No recycle bin. No undo. This is not git reset where you can recover from the reflog. When git clean deletes a file, it is permanently gone.
Git refuses to run clean without flags — it requires explicit -f (force) to prevent accidents. This is by design:
- clean.requireForce defaults to
true— Git protects you from yourself - Without
-f,-n, or-i, Git simply refuses to run - This has saved countless developers from accidental data loss
Common use cases: clean up build artifacts, temp files, experiment folders before starting fresh.
NEVER use git clean to delete files you might need. If unsure, cp them somewhere safe first.
git clean does NOT touch tracked files. Use git restore or git checkout for tracked file changes.
# Git refuses to run clean without flags
git clean
# fatal: clean.requireForce defaults to true and neither -n, -f, nor -i given
# refusing to clean
# This is GOOD — Git protects you from accidental deletion
# See what WOULD be deleted (dry run)
git clean -n
# Would remove untracked-file.txt
# Actually delete untracked files
git clean -f
# Removing untracked-file.txt
# Once deleted, it is GONE
ls untracked-file.txt
# No such file or directory
# No undo! No reflog for untracked files!
git reflog # only shows commits, not untracked files
The flags are the most important part of git clean. Each one changes what gets deleted. Memorize these:
- -n (dry run): SHOW what would be deleted WITHOUT actually deleting. ALWAYS run this first.
- -f (force): actually delete the files. Required because
clean.requireForcedefaults to true. - -d: include UNTRACKED DIRECTORIES in addition to files. Without -d, clean only removes files, not folders.
- -x: also remove IGNORED files (files matching
.gitignorepatterns likenode_modules,dist,.env). This is the nuclear flag. - -X: remove ONLY ignored files. Keep untracked non-ignored files. The selective nuke.
- -i (interactive): show a menu where you choose which files to delete. The safest option.
Common combos you will use daily:
git clean -nfd— dry run: show files + directories that would be deletedgit clean -fd— delete untracked files + directories (respects .gitignore)git clean -fdx— NUCLEAR: delete untracked + ignored files (deletes node_modules, dist, .env!)git clean -fdX— delete only ignored files (keep untracked non-ignored)
# DRY RUN — ALWAYS DO THIS FIRST
git clean -nfd
# Would remove temp.log
# Would remove build/
# Would remove experiment/
# Nothing actually deleted — just showing what would happen
# Delete untracked files + directories
git clean -fd
# Removing temp.log
# Removing build/
# Removing experiment/
# NUCLEAR OPTION — delete untracked + ignored files
git clean -nfdx # dry run first!
# Would remove temp.log
# Would remove build/
# Would remove .env ← IGNORED file!
# Would remove node_modules/ ← IGNORED directory!
git clean -fdx # actually deletes everything above
# Delete ONLY ignored files
git clean -fdX
# Removes: .env, node_modules/, dist/
# Keeps: experiment/, temp.log (untracked but not ignored)
# INTERACTIVE — safest way
git clean -i -d
# Shows menu:
# 1: clean
# 2: filter by pattern
# 3: select by numbers
# 4: ask each
# 5: quit
# 6: helpRule #1: ALWAYS run git clean -nfd before git clean -fd. No exceptions. Not even if you are in a hurry. Not even if you are sure.
Rule #2: If you need -x, run git clean -nfdx first. Check the output TWICE. Look for .env, look for local config files, look for anything you spent hours creating.
Rule #3: If unsure, use git clean -i -d for interactive selection. You pick exactly which files die and which survive.
Safe workflow: dry run → review output carefully → confirm → actual clean.
What git clean respects: .gitignore rules (without -x). Ignored files are safe unless you add -x.
What git clean ignores: tracked files (even if modified). Only untracked files are affected.
# The SAFE workflow — memorize this
# Step 1: Dry run
git clean -nfd
# Would remove temp.log
# Would remove experiment/
# Step 2: Review — do I need any of these?
# If YES → back them up, then continue
# If NO → proceed to step 3
# Step 3: Actual clean (remove the -n flag)
git clean -fd
# Removing temp.log
# Removing experiment/
# Step 4: Verify
git status
# working tree clean (or only tracked changes remain)
# If you need the NUCLEAR option:
git clean -nfdx # STEP 1: dry run with -x
git clean -fdx # STEP 2: actual nuke (only after reviewing!)
git config --global alias.clean-check 'clean -nfd' and git config --global alias.clean-nuke 'clean -nfdx'. Always run the dry-run alias first. The nuke alias is also dry-run by default — you have to remove the -n to actually delete. This two-step process has saved countless developers from accidental data loss.After switching branches with leftover build artifacts: git clean -fd removes them. Different branches may produce different build outputs — clean ensures you start fresh.
Before creating a clean build in CI: git clean -fdx ensures no cached or stale files. This guarantees the build is reproducible.
Cleaning up after a failed merge or experiment: git clean -fd removes the debris without touching your committed work.
Removing only ignored files to force re-install: git clean -fdX deletes node_modules but keeps your untracked work files. Then npm install for a fresh install.
Resetting to a completely clean state: git reset --hard + git clean -fdx = factory reset. Working directory matches the repo exactly.
BEWARE: git clean -fdx in a project with .env means your local environment variables are DELETED. Always back up .env first.
# Use case 1: Clean build artifacts after switching branches
git checkout main
git clean -nfd # check what build files exist
git clean -fd # remove them
# Use case 2: Factory reset — cleanest possible state
git reset --hard HEAD # reset all tracked changes
git clean -fdx # remove all untracked + ignored
# Now your working directory matches the repo exactly
# Use case 3: Reinstall dependencies from scratch
git clean -fdX -n # dry run: see what ignored files exist
git clean -fdX # delete node_modules, dist, .next, etc.
npm install # fresh install
# Use case 4: Clean up experiment files
git stash # save your actual work first
git clean -nfd # check what is untracked
git clean -fd # remove experiment files
git stash pop # restore your work
# Use case 5: CI/CD clean build
git clean -fdx
npm ci # clean install from lockfile
npm run build # guaranteed clean buildDo not use git clean if you have untracked files you MIGHT need. Back them up first. There is no undo.
Do not use git clean -x if your .env file is not backed up. It will be deleted. Your database passwords, API keys, local config — all gone. Recreating .env from memory is painful and error-prone.
Do not use git clean instead of proper .gitignore. Add files to .gitignore FIRST, then clean. Clean is a cleanup tool, not a prevention tool.
Do not use git clean on shared network drives — other users untracked files could be affected. Clean is for your local clone only.
Do not confuse git clean with git restore. Clean removes UNTRACKED files. Restore discards changes to TRACKED files. They target completely different things.
If you need to save work temporarily, use git stash or git commit to a temporary branch — NOT git clean.
Lo kar liya — Key Points:
- ✅ git clean removes UNTRACKED files and directories — it does NOT affect tracked files
- ✅ ALWAYS run dry run first with -n: git clean -nfd shows what would be deleted
- ✅ -f is required (force), -d includes directories, -x includes ignored files, -X only ignored files
- ✅ git clean -fdx is NUCLEAR — it deletes node_modules, .env, dist, and all ignored files
- ✅ git clean -fdX removes only ignored files (node_modules, dist) but keeps untracked non-ignored files
- ✅ Deleted untracked files are GONE FOREVER — no reflog, no undo, no recovery
- ✅ Use -i for interactive mode — safely choose which files to delete one by one
Want to track your progress?
Log in to save your place and pick up where you left off.
Progress track karna chahte ho?
Login karo apni progress save karne ke liye aur jahan chhoda tha wahan se shuru karo.
Login