メインコンテンツにスキップ
A broom sweeping away untracked files in a Git repository
Gitリポジトリをクリーンアップするイメージ

gitで未追跡ファイルを完全に削除する方法(git clean)

タグ: 🏷 git

はじめに

開発を進めていると、gitで追跡していないファイル(untracked files)がリポジトリ内に溜まってしまうことがあります。

AIに書いてもらったけど、元に戻したい。checkoutすると、追跡しているファイルは戻せるのですが、追跡していないファイルは削除してくれません。

先に結論

git clean -fdを使えばOKです。

コマンド説明
git clean -fd未追跡のファイルとディレクトリを削除(結果、これをよく使う)
git clean -n削除対象のファイルとディレクトリを一覧表示(ドライラン)
git clean -f未追跡のファイルを削除
git clean -fx.gitignore で無視しているファイルも含め、未追跡のファイルとディレクトリを削除

git clean とは?

git clean は、gitリポジトリから未追跡ファイルを削除するためのコマンドです。git reset --hardgit checkout が追跡中のファイル(tracked files)を操作するのに対し、git clean は追跡されていないファイルのみを対象とします。

注意: git clean で削除したファイルは元に戻すことができません。実行する前には、必ず削除対象のファイルを確認することをお勧めします。

削除対象のファイルを確認する (ドライラン)

実際にファイルを削除する前に、どのファイルが削除対象になるかを確認するのが安全です。-n または --dry-run オプションを使うことで、削除される予定のファイルリストを表示できます。

git clean -n

このコマンドを実行すると、削除されるファイルの一覧が表示されますが、実際の削除は行われません。

未追跡ファイルを削除する

ドライランで問題がないことを確認したら、いよいよファイルを削除します。-f または --force オプションが必要です。

git clean -f

このコマンドは、未追跡のファイルのみを削除します。ディレクトリは対象外です。

ディレクトリもまとめて削除する

未追跡のディレクトリも一緒に削除したい場合は、-d オプションを追加します。

git clean -fd

これにより、未追跡のファイルとディレクトリの両方が削除されます。

.gitignore で無視しているファイルも削除する

通常、git clean.gitignore で指定されているファイル(例えば node_modulesdist など)は削除しません。これらの無視されているファイルも含めてすべてクリーンにしたい場合は、-x オプションを使います。

git clean -fdx

このコマンドは、追跡されておらず、かつ .gitignore で無視されているファイルやディレクトリもすべて削除するため、リポジトリをクリーンな状態に戻したいときに非常に強力です。

まとめ

git clean は非常に便利なコマンドですが、その破壊的な性質を理解し、必ず -n (ドライラン) で削除対象を確認してから実行するようにしましょう。