Gitで開発していると、こんな経験はありませんか?
- テスト用に作ったファイルが残っている
- ビルドやキャッシュで生成されたファイルが溜まっている
- ログファイルや設定ファイルが散らかっている
このように、Gitで作業していると、未追跡のファイルやディレクトリ、.gitignoreで無視しているファイルやディレクトリがどんどん溜まってしまうことがあります。これらを削除してクリーンな状態に戻してくれるのが、git clean
コマンドです。
この記事では、git clean
の基本から便利なオプションまで、実行例つきでわかりやすく解説します。
git cleanとは?
git clean
は、Gitリポジトリ内の未追跡ファイルやディレクトリを削除するコマンドです。-x
オプションを付ければ、.gitignore
に記載されたファイルやディレクトリも削除することができます。
削除できる対象は主に次の2種類です。
- 未追跡ファイル/未追跡ディレクトリ
- 新しく作成したファイルやディレクトリ
- gitの管理外ファイル/管理外ディレクトリ
.gitignore
で無視しているファイルやディレクトリ(例:*.log
やnode_modules/
)
git clean
コマンドを実行すれば、上記の余計なファイルやディレクトリを一気に削除することができるので、クリーンな状態に戻すことができます。
git clean
コマンドは実際にファイルやディレクトリを削除します。削除したら戻せないので、コマンド実行前に慎重に確認することが重要です。
git cleanの基本コマンド一覧
git clean
の基本コマンド一覧表を以下に示します(後ほどコマンドの使い方について説明します)。
削除対象 | 確認(ドライラン) | 実際に削除 | 注意点 |
未追跡ファイル | git clean -n | git clean -f | - |
未追跡ファイル 未追跡ディレクトリ | git clean -dn | git clean -df | - |
管理外ファイル | git clean -Xn | git clean -Xf | X は大文字 |
管理外ファイル 管理外ディレクトリ | git clean -Xdn | git clean -Xdf | X は大文字 |
未追跡ファイル 管理外ファイル | git clean -xn | git clean -xf | x は小文字 |
未追跡ファイル 未追跡ディレクトリ 管理外ファイル 管理外ディレクトリ | git clean -xdn | git clean -xdf | x は小文字 |
git clean
コマンドでよく使うオプション
git clean
の挙動はオプションの組み合わせで決まります。ここではよく使うオプションを詳しく解説します。
-n
(--dry-run)- 削除対象を確認するだけ。実際には削除されません。
- 実際に削除する前に、このオプションを付けて削除対象を確認することをお勧めします。
-f
(--force)- 削除を実行するために必須のオプションです。
git clean
は-f
がないと削除されません。- ただし、Git の設定で
clean.requireForce=false
にしている場合は省略可能です。
-d
(--dir)- ディレクトリも削除対象に含めるオプションです。
-d
を付けない場合はファイルしか削除されず、ディレクトリは残ります。
-x
- 管理外ファイルやディレクトリ(.gitignoreに一致するファイルやディレクトリ)も含めて削除します。
- 例えば、
node_modules/
やログファイルなども消えます。 - 必要なキャッシュや設定ファイルまで削除する危険があるので、削除する前に必ず
-xn
や-xdn
で削除対象の確認を行いましょう。
-X
- 管理外ファイルやディレクトリ(.gitignoreに一致するファイルやディレクトリ)のみ削除します。
- 未追跡ファイルや未追跡ディレクトリは削除しません。
- 削除する前に必ず
-Xn
や-Xdn
で削除対象の確認を行いましょう。
では実際に各コマンドを触ってみましょう。
git cleanコマンドの使い方
ではこれから実際にgit clean
コマンドの使い方を実行例つきでわかりやすく解説します。
未追跡ファイルと未追跡ディレクトリを確認する
未追跡ファイルと未追跡ディレクトリの削除を実行する前に、どのファイルやディレクトリが未追跡であるかを確認しましょう。これには-n
(--dry-run)オプションを使用します。
git clean -dn
実行例
$ git clean -dn
Would remove test.txt
Would remove test/
Would remove ...
と表示されるだけで、実際には削除されません。ここで削除対象をよく確認しましょう。
未追跡ファイルと未追跡ディレクトリを削除する
削除対象を確認して問題なければ、実際に削除を実行します。未追跡ファイルと未追跡ディレクトリを削除するには以下のコマンドを実行します。
git clean -df
実行例
$ git clean -df
Removing test.txt # 未追跡ファイルを削除
Removing test/ # 未追跡ディレクトリを削除
-f
を付けることで、実際に削除されます。
gitの管理外ファイルと管理外ディレクトリも削除する
.gitignore
に記載されているファイルやディレクトリも削除したい場合は、-x
オプションを追加します。
git clean -xdf
実行例
$ git clean -xdf
Removing test.txt # 未追跡ファイル or 管理外ファイル(.gitignore対象)を削除
Removing test/ # 未追跡ディレクトリ or 管理外ディレクトリ(.gitignore対象)を削除
-x
は.gitignore
に記載されているファイルやディレクトリも削除する強力なオプションです。例えばnode_modules/
やログファイル、場合によっては重要な設定ファイルも消える可能性があります。実行前に必ずgit clean -xdn
で確認しましょう。
補足
.gitignore
に記載されているファイルやディレクトリのみ削除したい場合には、小文字のx
ではなく大文字のX
を用いて、以下のコマンドを実行します。
git clean -Xdf
本記事のまとめ
この記事ではgit clean
コマンドについて、以下の内容を説明しました。
git clean
は「未追跡ファイル/ディレクトリ」や「無視されたファイル/ディレクトリ」を削除できるコマンド- 実行前に必ず
-n
で確認するのが安全 -f
で削除を実行する-d
でディレクトリも削除対象にする.gitignore
のファイルを消すときは-x
または-X
を使う
作業ディレクトリが散らかってきたときにgit clean
を使えば、リポジトリを一瞬でクリーンな状態に戻せます。ただし「消したら戻せない」ので、常に確認 → 削除実行の順で使うようにしましょう。
お読み頂きありがとうございました。