Gitコマンド

git clean

追跡対象となっていないファイルを削除します。

記法

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

概要

Git による管理されていないファイルを、作業ツリーから削除します。削除では、現在のディレクトリと、そのサブディレクトリを再帰的に対象にします。

デフォルトでは Git にとって未知のファイルが削除されますが、-x オプションを使った場合、ignore 指定されたファイルも含めて削除を行います。

引数でパスを指定すれば、クリーニングするディレクトリを限定することもできます。

主要なオプション

-d

追跡していないディレクトリを含めて、再帰的に削除を行います。デフォルトでは、<path> が指定されていない場合、git clean は追跡していないディレクトリを削除しません。

もし <path> が指定された場合、この -d オプションは無視されます––指定されたパスにマッチする、すべての追跡していないファイルが削除されます。(ただし、入れ子となったされた git ディレクトリは例外です。詳しくは -f オプションをお読み下さい)

【補足】この振る舞いはやや混乱します。「<path> 引数でパスを明示することで、-d  オプションがなくてもあたかもあるように動作する」と理解します。

-f, --force

-f や、-i のが与えられない限り、git clean はファイルやディレクトリを削除しません。ただし、Git 設定変数 clean.requireForce が false にセットされていない場合のみです。(デフォルトは true です)

また、-f が与えれらない限り、Git は追跡していない入れ子の Git レポジトリ(.git という名前のサブディレクトリが配置されたディレクトリ)を内を変更しません。

【補足】このようなエラーで警告されます

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

-i, --interactive

個々の削除対象が明示され、対話的に処理を指定しながらファイルを削除します。

Would remove the following item:
  file-name.txt
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit
    6: help
What now>

-n, --dry-run

ドライランします。実際には削除せず、削除対象への処理を出力します。

-q, -quiet

静かに実行します。エラーのみを表示し、削除されたファイルを表示しません。

-e <pattern>, --exclude=<pattern>

標準の ignore ルールに加えて、指定された除外パターンを適応します。

-x

-e オプションで与えられた ingnore ルールだけを適応し、標準の ignore ルール を適応しません。このオプションで、追跡していないすべてのファイル(ビルド後のファイルを含む)を削除することができます。

このオプションで( git restore や git reset と組み合わせつつ )手を付けていない作業ディレクトリ、からクリーンなビルドを行うことができます。

-X

Git が無視しているファイルだけを削除します。このオプションは、手動で作成したファイルを残しながら、すべてをゼロから再構築するときに役立つでしょう。

git clean の使用例

削除されたファイルは取り戻す事ができないので、事前にドライランで様子を見るのが懸命だと思います。

// imagesディレクトリ配下を、完全にクリーニング。怖いのでドライランする
git clean -xn images

更新履歴

2020/4/25 誤記の訂正を含め、全体の記述を更新。

 

Git公式ドキュメント

Git公式ドキュメント「git clean」へのリンクです。