Git cleanとは?未追跡ファイルを削除する方法と安全な使い方を解説
Git cleanの基本的な使い方から安全な運用方法まで初心者向けに解説します。未追跡ファイルの削除、ドライラン(-n)での事前確認、.gitignoreとの関係を理解して、作業ディレクトリをきれいに保ちましょう。
Git cleanとは
Git cleanは、Gitで追跡されていないファイル(未追跡ファイル)を作業ディレクトリから削除するコマンドです。ビルド生成物や一時ファイルなど、リポジトリに含めたくないファイルをまとめて削除するときに使います。
git statusで「Untracked files」として表示されるファイルが削除対象になります。一度削除すると元に戻せないため、実行前に必ず確認することが重要です。
Git cleanの基本的な使い方
削除対象を確認する(ドライラン)
実際に削除する前に、何が削除されるかを確認しましょう。-nオプション(ドライラン)を使うと、削除されるファイルを表示するだけで、実際には削除しません。
# 削除されるファイルを確認(実際には削除しない)
git clean -n
出力例:
Would remove temp.log
Would remove build/output.js
Would remove debug.txt
「Would remove」と表示されたファイルが、実際にgit cleanを実行したときに削除される対象です。
未追跡ファイルを削除する
確認が済んだら、-fオプション(force)を付けて実行します。Gitはデータ損失を防ぐため、-fなしではgit cleanを実行できません。
# 未追跡ファイルを削除
git clean -f
出力例:
Removing temp.log
Removing build/output.js
Removing debug.txt
ディレクトリも含めて削除する
デフォルトでは、未追跡のディレクトリは削除されません。ディレクトリも削除するには-dオプションを追加します。
# ディレクトリも含めて削除対象を確認
git clean -dn
# ディレクトリも含めて削除
git clean -df
よく使うオプション
| オプション | 説明 |
|---|---|
-n | ドライラン。削除されるファイルを表示するが、実際には削除しない |
-f | 強制実行。このオプションなしでは削除が実行されない |
-d | 未追跡のディレクトリも削除対象に含める |
-x | .gitignoreで無視されているファイルも削除対象に含める |
-X | .gitignoreで無視されているファイルのみを削除 |
-i | 対話モード。削除するファイルを1つずつ確認できる |
オプションの組み合わせ例
# 最も一般的な使い方:未追跡ファイルとディレクトリを削除
git clean -df
# 削除前に必ず確認
git clean -dn
# .gitignore対象も含めてすべて削除(ビルド成果物のクリーンアップなど)
git clean -dfx
# .gitignore対象のみを削除
git clean -dfX
# 対話モードで1つずつ確認しながら削除
git clean -di
.gitignoreとの関係
git cleanのデフォルトの動作では、.gitignoreで指定されたファイルは削除されません。これは意図的な設計で、IDEの設定ファイルやローカル環境固有のファイルを誤って削除しないようにしています。
| オプション | 未追跡ファイル | .gitignore対象 |
|---|---|---|
git clean -f | 削除する | 削除しない |
git clean -fx | 削除する | 削除する |
git clean -fX | 削除しない | 削除する |
-xと-Xの使い分け
# 開発中のクリーンアップ:未追跡ファイルのみ削除
# .gitignoreで指定したnode_modulesや.envは残す
git clean -df
# 完全なクリーンビルド:すべて削除して最初からビルド
# node_modulesやビルド成果物も削除
git clean -dfx
# キャッシュだけクリア:.gitignore対象のみ削除
# 手動で作成した未追跡ファイルは残す
git clean -dfX
対話モード(-i)の使い方
-iオプションを使うと、対話的に削除対象を選択できます。
git clean -di
出力例:
Would remove the following items:
build/ temp.log debug.txt
*** Commands ***
1: clean 2: filter by pattern
3: select by numbers 4: ask each
5: quit 6: help
What now>
| コマンド | 説明 |
|---|---|
| 1: clean | 表示されているすべてのファイルを削除 |
| 2: filter by pattern | パターンを指定して絞り込み |
| 3: select by numbers | 番号で削除対象を選択 |
| 4: ask each | 1つずつ確認しながら削除 |
| 5: quit | 何もせずに終了 |
慣れないうちは4: ask eachを選ぶと、各ファイルについて削除するかどうかを確認できるので安全です。
実践的な活用シーン
ビルド成果物のクリーンアップ
ビルドの問題が発生したとき、生成されたファイルをすべて削除して最初からビルドし直すことがあります。
# 削除対象を確認
git clean -dnx
# 確認後、削除を実行
git clean -dfx
# 依存関係の再インストールとビルド
npm install
npm run build
PRのテスト前にクリーンな状態にする
他の人のプルリクエストをテストする前に、自分の作業中のファイルが影響しないようクリーンにします。
# 作業中の変更を退避
git stash
# 未追跡ファイルを削除
git clean -df
# PRブランチに切り替え
git checkout feature/new-feature
詳しくはGit stashの使い方を参照してください。
特定のパターンのファイルだけ削除
特定の拡張子や名前のファイルだけを削除したい場合は、パスを指定します。
# .logファイルだけを確認
git clean -n *.log
# .logファイルだけを削除
git clean -f *.log
# 特定のディレクトリ内だけをクリーン
git clean -df build/
初心者が混乱しやすいポイント
git cleanは取り消せない
git cleanで削除したファイルは、Gitの管理下にないためreflogなどで復元できません。削除されたファイルはゴミ箱にも入らず、完全に消えてしまいます。
# 必ずドライランで確認してから実行する
git clean -dn # まず確認
git clean -df # 確認後に実行
重要なファイルを誤って削除しないよう、-nオプションでの確認を習慣にしましょう。
git resetとの違い
git resetとgit cleanは、どちらも「元に戻す」系のコマンドですが、対象が異なります。
| コマンド | 対象 | 用途 |
|---|---|---|
git reset | 追跡中のファイル | コミットやステージングを取り消す |
git clean | 未追跡のファイル | 追跡されていないファイルを削除する |
git restore | 追跡中のファイル | 作業ディレクトリの変更を取り消す |
# 追跡中ファイルの変更を取り消す
git restore modified-file.js
# 未追跡ファイルを削除する
git clean -f untracked-file.js
詳しくはGit revertとresetの違いも参照してください。
-fオプションが必要な理由
git cleanを-fなしで実行すると、以下のエラーが表示されます。
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
これはGitの安全機能で、誤って重要なファイルを削除しないようになっています。削除を実行するには、以下のいずれかを使う必要があります。
| オプション | 動作 |
|---|---|
-f | 強制的に削除を実行 |
-n | ドライラン(削除しない) |
-i | 対話モード |
.gitignoreに追加する前にgit cleanすると消える
新しく追加したファイルを.gitignoreに追加する前にgit clean -fを実行すると、そのファイルが削除されてしまいます。
# 設定ファイルを作成
echo "API_KEY=xxx" > .env.local
# .gitignoreに追加する前にcleanすると...
git clean -f
# .env.localが削除されてしまう!
新しいファイルを作成したら、すぐに.gitignoreに追加するか、git addでステージングしておきましょう。
git cleanを安全に使うためのベストプラクティス
安全にgit cleanを使うためのチェックリストです。
| ステップ | コマンド | 説明 |
|---|---|---|
| 1 | git status | 現在の状態を確認 |
| 2 | git clean -dn | 削除対象を確認 |
| 3 | git clean -df | 問題なければ削除を実行 |
# 1. 現在の状態を確認
git status
# 2. 削除対象を確認(ドライラン)
git clean -dn
# 3. 内容を確認して問題なければ削除
git clean -df
大規模なクリーンアップを行う場合は、事前にバックアップを取ることも検討してください。
まとめ
Git cleanは、未追跡ファイルを作業ディレクトリから削除するコマンドです。
| オプション | 用途 |
|---|---|
-n | ドライラン(削除対象の確認) |
-f | 強制実行(削除の実行) |
-d | ディレクトリも削除対象に含める |
-x | .gitignore対象も削除 |
-X | .gitignore対象のみを削除 |
- 削除前に必ず
git clean -dnでドライランを実行する - 削除したファイルは復元できないため、慎重に使用する
- .gitignore対象ファイルはデフォルトで削除されない
-xオプションで完全なクリーンビルドが可能
未追跡ファイルを削除する際は、常にドライランで確認する習慣をつけましょう。特に-xオプションを使う場合は、意図しないファイルが削除されないよう注意が必要です。
編集部