🧹

git cleanでuntracked filesを安全に削除する方法

に公開

はじめに

Gitで作業していると、git statusを実行したときに「Untracked files」が大量に表示されることがあります。

$ git status
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	src/components/unused-component.tsx
	temp/debug.log
	.env.local
	node_modules_backup/
	test-results.html

これらの不要なファイルを一つずつ手動で削除するのは面倒です。そんな時に便利なのがgit cleanコマンドです。

git cleanとは

git cleanは、Gitの追跡対象外(untracked)のファイルやディレクトリを削除するコマンドです。作業ディレクトリをクリーンな状態に戻すことができます。

基本的な使い方

1. まず削除対象を確認する(ドライラン)

# ファイルのみ確認
git clean -n

# ディレクトリも含めて確認
git clean -nd

-n(または--dry-run)オプションを使うと、実際には削除せずに、削除される予定のファイルを表示してくれます。

実行例:

$ git clean -n
Would remove src/components/unused-component.tsx
Would remove temp/debug.log
Would remove .env.local
Would remove test-results.html

2. ファイルを削除する

確認して問題なければ、-f(force)オプションで実際に削除します。

# ファイルのみ削除
git clean -f

# ファイルとディレクトリを削除
git clean -fd

オプション詳細

オプション 説明 使用例
-n, --dry-run 削除対象を表示(実際には削除しない) git clean -n
-f, --force 実際に削除を実行 git clean -f
-d ディレクトリも削除対象に含める git clean -fd
-x .gitignoreで無視されているファイルも削除 git clean -fx
-X .gitignoreで無視されているファイルのみ削除 git clean -fX
-i インタラクティブモード git clean -i

実践的な使用例

ケース1: ビルド生成物をクリーンアップ

# ビルド生成物や一時ファイルを確認
git clean -ndx

# 問題なければ削除
git clean -fdx

ケース2: 特定のパスのみクリーンアップ

# srcディレクトリ内のuntrackedファイルのみ削除
git clean -f src/

# tempディレクトリを丸ごと削除
git clean -fd temp/

ケース3: インタラクティブモードで選択的に削除

git clean -i

インタラクティブモードでは、各ファイルを個別に削除するか選択できます。

*** Commands ***
    1: clean                2: filter by pattern
    3: select by numbers    4: ask each
    5: quit                 6: help
What now>

注意点とベストプラクティス

1. 必ずドライランで確認

# これを習慣化する
git clean -nd  # まず確認
git clean -fd  # 問題なければ実行

2. .gitignoreファイルの扱いに注意

  • -xオプション:.gitignoreで無視されているファイルも削除(node_modules等も消える)
  • オプションなし:.gitignoreで無視されているファイルは残る
# node_modulesやビルド成果物も削除したい場合
git clean -fdx

# .gitignoreで管理されているファイルは残したい場合
git clean -fd

3. 重要なファイルのバックアップ

削除前に重要そうなファイルはバックアップを取っておきましょう。

# バックアップを作成
cp -r important-untracked-dir /tmp/backup/

# git cleanを実行
git clean -fd

よくあるトラブルと対処法

Q: "fatal: clean.requireForce defaults to true" エラーが出る

A: -fオプションを付け忘れています。安全のため、git cleanは-fオプションなしでは動作しません。

# NG
git clean -d

# OK
git clean -fd

Q: node_modulesが削除されてしまった

A: -xオプションを使うと.gitignoreで無視されているファイルも削除されます。node_modulesを残したい場合は-xを使わないようにしましょう。

# node_modulesも削除される
git clean -fdx

# node_modulesは残る
git clean -fd

# 削除後はnpm installで復元
npm install

Q: 特定のファイルだけ残したい

A: インタラクティブモード(-i)を使うか、事前にgit addで追跡対象にしておきます。

# 残したいファイルを先にaddする
git add keep-this-file.txt

# untrackedファイルを削除
git clean -f

# addを取り消す
git reset keep-this-file.txt

まとめ

git cleanは作業ディレクトリをクリーンに保つための強力なツールです。ただし、削除系のコマンドなので慎重に使用する必要があります。

基本的な流れ:

  1. git clean -ndで削除対象を確認
  2. 問題なければgit clean -fdで実行
  3. 必要に応じて-xオプションを追加

これらのコマンドを適切に使いこなすことで、Gitリポジトリを常にクリーンな状態に保つことができます。

参考資料

Discussion