git clean の使い方まとめ
概要
- git cleanは「未追跡ファイル(untracked)や未追跡ディレクトリ」を削除するコマンド
- コミット済みの変更やステージング済みの変更には影響しない(未追跡のみが対象)
- 必ずドライラン(-n)で削除対象を確認してから実行する
ユースケース
- ビルド成果物や生成ファイルを一括で掃除したい
- 作業途中で増えた不要な未追跡ファイルをまとめて消したい
- ブランチを切り替える前にワークツリーをきれいにしたい
基本コマンド
# 削除されるファイルを確認(実際には削除しない)
$ git clean -n
# 未追跡ファイルを削除(確認後に実行)
$ git clean -f
よく使うオプション
- -n, –dry-run: 実際には削除せず、対象のみ表示(必ず最初に使う)
- -f, –force: 実際に削除を実行(-nで確認後に使用)
- -d: 未追跡ディレクトリも削除(デフォルトはファイルのみ)
- -x: .gitignoreで無視されているファイルも含めて削除
- -X: .gitignoreで無視されているファイルのみ削除(生成物の掃除に便利)
- -i: 対話モードで個別に選択して削除
安全に使う手順
- 1) まず状況確認
$ git status --short
- 2) ドライランで対象確認
$ git clean -nd # 未追跡のディレクトリも確認
- 3) 問題なければ実行(用途に合わせてオプションを変える)
# 未追跡ファイル・ディレクトリを削除
$ git clean -fd
# 生成物(.gitignore対象)だけ掃除
$ git clean -fdX
# すべての未追跡(.gitignore無視分も含む)を掃除
$ git clean -fdx
よくある使い方の例
- ビルド成果物をきれいにする
$ git clean -ndX # 対象を確認
$ git clean -fdX # 実行
- 間違って作った未追跡のファイルやフォルダを丸ごと消す
$ git clean -nd # 対象を確認
$ git clean -fd # 実行
- 対話的に選びたい
$ git clean -i
パス指定(pathspec)
- 特定ディレクトリのみ対象にできる
$ git clean -nd -- build/ dist/
$ git clean -fd -- build/ dist/
resetやstashとの違い
- git clean: 未追跡ファイルを削除
- git reset –hard: 追跡ファイルの変更を破棄(未追跡は残る)
- git stash -u: 変更と未追跡ファイルを一時退避(-uで未追跡も含む)
注意点
- 一度削除すると復元は基本的に困難(履歴にないため)
- .gitignoreで無視されているファイルを守りたい場合は-xを使わない
- まず-nで確認、次に-fで実行を習慣化する