git clean
追跡されていないファイルやディレクトリを作業ツリーから削除します。誤って作成した一時ファイルやビルド成果物をまとめて取り除く操作です。
git clean [options] [path]... git clean は、Git が追跡していない(untracked)ファイルやディレクトリを作業ツリーから削除するコマンドです。git restore が追跡済みファイルの変更を取り消すのに対し、git clean は新しく作成された未追跡ファイルを削除するという役割を担います。
警告:
git cleanで削除したファイルは通常の方法では復元できません。必ず-n(dry-run)で確認してから実行してください。
基本的な使い方
# 削除対象を確認する(実際には削除しない)
git clean -n
# 未追跡ファイルを削除する(-f が必須)
git clean -f
# 未追跡ファイルとディレクトリをまとめて削除する
git clean -fd
dry-run で事前確認する
-n または --dry-run を使うと、実際には何も削除せず、削除されるはずのファイルの一覧だけを確認できます。
# ファイルとディレクトリの削除対象を確認
git clean -nfd
Would remove build/
Would remove temp.log
Would remove src/generated.js
実行結果を確認してから -n を外して本番実行するのが安全な手順です。
# 確認後、実際に削除
git clean -fd
.gitignore ファイルの扱い
デフォルトでは、.gitignore に記載されたファイルは削除されません。これを変更するには -x または -X を使います。
# .gitignore 対象も含めてすべて削除(node_modules、ビルド成果物なども消える)
git clean -fdx
# .gitignore に記載されたファイルだけを削除(通常の未追跡ファイルは残す)
git clean -fdX
-x と -X の使い分け
| オプション | 削除対象 | 主な用途 |
|---|---|---|
| なし | 未追跡ファイル(gitignore 除く) | 作業中の一時ファイル削除 |
-x | 未追跡ファイル + gitignore 対象 | 依存パッケージごとクリーンな状態に戻す |
-X | gitignore 対象のみ | ビルドキャッシュだけ削除したい |
対話モード
-i オプションで対話モードを起動すると、削除するファイルを1つずつ確認しながら選択できます。
git clean -fd -i
Would remove the following items:
build/ temp.log
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now>
git restore との違い
git clean と git restore は混同されやすいコマンドです。
| コマンド | 対象 | 操作 |
|---|---|---|
git restore <file> | 追跡済みファイル(tracked) | 変更を取り消す |
git clean -f <file> | 未追跡ファイル(untracked) | ファイルを削除する |
git status で表示される Changes not staged for commit: の行は git restore、Untracked files: の行は git clean で対処します。
git stash -u との使い分け
未追跡ファイルを「一時的に退避させたい」場合は git stash -u を使います。
# 未追跡ファイルを含めて一時退避(後で git stash pop で戻せる)
git stash -u
# 未追跡ファイルを完全に削除(戻せない)
git clean -fd
| コマンド | ファイルの行方 | 復元 |
|---|---|---|
git stash -u | スタックに保存 | git stash pop で復元可能 |
git clean -fd | 完全削除 | 復元不可 |
後で必要になるかもしれないファイルは git stash -u で退避するのが安全です。