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を使えば、リポジトリを一瞬でクリーンな状態に戻せます。ただし「消したら戻せない」ので、常に確認 → 削除実行の順で使うようにしましょう。
お読み頂きありがとうございました。