git clean -f -dで未追跡ファイルとディレクトリを消す

  • Git
  • CLI

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

オプションの意味

git clean -f -d は未追跡のファイルとディレクトリを削除するコマンド。

  • -f(--force): 未追跡ファイルを実際に削除する。clean.requireForce がデフォルトで有効なので、-fか-iをつけないとgitが実行を拒否する。
  • -d: 未追跡のディレクトリも削除対象に含める。これを付けないとファイルだけが対象になり、空になった未追跡ディレクトリは残る。

追跡済みファイルの変更には一切手を出さない。あくまで「gitが把握していないもの」だけが対象。

実行前に確認する方法

いきなり-f -dを打つと何が消えたか把握しづらい。-n(--dry-run)を先に付けると、実際には消さずに削除対象だけ表示してくれる。

$ git clean -n -f -d

これで問題なさそうなら-nを外して実行する、という流れが安全。

無視ファイルとの関係

.gitignoreで無視されているファイルはデフォルトでは対象外。

  • 無視ファイルも含めて全部消したい場合は -x を追加
  • 無視ファイルだけを消したい場合は -X を追加

普段のgit clean -f -dはこの2つを付けないので、.gitignoreに書いてあるものは残る。

注意点

事前確認なしでこのコマンドを常用するなら、エイリアスやスクリプト化する前に一度-nで試す習慣にしておいたほうがいい。オプションの意味自体はgitの基本機能で、バージョンが変わっても挙動が変わるような部分ではない。