git cleanでレポジトリをクリーンにする:Untracked Filesを安全かつプロフェッショナルに削除する方法

Git tutorial - IT technology blog
Git tutorial - IT technology blog

背景:ワークスペースが「戦場」と化すとき

1日の作業でビルドを何度も実行したり、ライブラリを試用したり、デバッグを行ったりすると、プロジェクトフォルダはゴミファイルで溢れかえりがちです。ログファイル、ビルドフォルダ(distやtarget)、あるいはテストスクリプトで生成された数千ものサムネイル画像などです。

git statusを実行すると、膨大な「Untracked files」のリストが表示されます。数ファイルを手動で削除するのは簡単ですが、数十のサブフォルダに散らばった数百のファイルを削除するのは、まさに悪夢です。多くの人が git checkout . や git reset –hard でこれらが一掃されると誤解しがちです。しかし実際には、これらのコマンドはGitがすでに管理しているファイルにしか作用しません。一度も git add されていない新しいファイルは、Gitによって無視されます。

以前、移行プロジェクトに携わった際、スクリプト実行後に5000以上のテンポラリJSONファイルが生成されました。その時、git clean はわずか2秒ですべてを消し去ってくれた救世主でした。

Gitのデフォルトの保護メカニズム

Gitは削除コマンドに対して非常に慎重です。一度 git clean を実行すると、データはゴミ箱に入ることなく永久に失われ、元に戻す(undo)こともできません。そのため、Gitには clean.requireForce という安全装置が備わっています。パラメータなしでコマンドを実行すると、Gitは実行を拒否し、エラーメッセージを表示します。

fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

このエラーは、「自分が何をしているかを理解している」という確認を求めています。 git config --global clean.requireForce false でこの設定をオフにすることもできますが、推奨はしません。不注意によるミスから自分を守るために、その安全装置はそのままにしておきましょう。

実践で役立つgit cleanコマンド

安全にクリーンアップするために、以下の3つのレベルを覚えておきましょう。

1. 「プレビュー」モード (Dry Run) – 常に最初に実行すること

実際に削除する前に、-n(または --dry-run)フラグを使用してください。Gitはハードドライブに影響を与えることなく、削除される予定のファイルのリストを表示します。

git clean -n

結果は Would remove debug.log のように表示されます。このリストを注意深く確認し、重要なコードファイルが誤って削除対象に含まれていないか確認してください。

2. 単一ファイルの削除 (Force)

確信が持てたら、-n-f (force) に置き換えて実行します。

git clean -f

注意:このコマンドはデフォルトで単一のファイルのみを削除し、ディレクトリ(フォルダ)には手をつけません。

3. フォルダごとクリーンアップ (Recursive)

dist/temp_data/ のような不要なディレクトリをすべて削除するには、-d フラグを追加する必要があります。

git clean -fd

これは最も一般的な組み合わせで、ワークスペースを完全にクリーンな状態に戻すのに役立ちます。

4. .gitignore内のファイルも削除する

通常、git clean.gitignore で指定したファイルを除外します。しかし、プロジェクトをクローン直後の「初期状態」にリセットしたい場合は、-x フラグを使用します。

git clean -fdx

強力な警告: このコマンドは、データベースのパスワードを含む .env ファイルや、ライブラリフォルダ(node_modules)などもすべて削除します。すべてを一からビルドし直したい場合のみ使用してください。

5. 対話モード (Interactive)

削除するか残すかをファイルごとに選択したい場合は、-i フラグを使用します。

git clean -fd -i

Gitが選択メニューを表示します。この方法は少し時間がかかりますが、ファイルが乱雑に散らばっている場合には非常に安全です。

実プロジェクトでのクリーンなレポジトリ維持

クリーンアップが終わったら、git status で再度確認しましょう。「working tree clean」と表示されれば成功です。

私のチームでは、大規模なブランチをマージするたびにメンバーが git clean -fd を実行しています。これにより、古いブランチからのゴミファイルが新しいブランチに誤ってコミットされるのを防ぎ、コードレビュー時のノイズを減らすことができます。

小さなヒント:特定の種類のファイルに対して頻繁に git clean を使っていることに気づいたら、それを .gitignore に追加しましょう。.vscode.idea のようなIDE設定フォルダについては、グローバルのgitignoreに設定しておくと、掃除のたびに心配する必要がなくなります。

標準的な手順を忘れないでください:ステータス確認 -> プレビュー (-n) -> 実行 (-f)。美しくクリーンなコミットを目指しましょう!

Share: