Gitリポジトリの中身を全部一気に消す

Gitリポジトリの中のファイルを一括で消すコマンドといえば、よく言われるのはこれ:

git rm -rf .

しかしこれはちょっと問題があって、

  • GitでUntrackedなファイルは削除対象じゃない
  • 削除対象ファイルが0コの場合はエラーになる

というちょっと扱いづらいもの。


ならば当然こういう選択肢が出る:

rm -rf ./*

ただこれだと今度は.gitディレクトリまで削除されてしまう。


そこでオススメするonelinearはコチラ:

git clean -fdx && test $(git ls-files | wc -l) -eq 0 || git rm -rf .

ちょっと解説。

git clean -fdx

git clean -fdxのオプションは、

  • -f: force
  • -d: ディレクトリを対象に
  • -x: ignore対象も削除

これでまずUntrackedなファイル含めクリーンに。

&& test $(git ls-files | wc -l) -eq 0

次に test $(git ls-files | wc -l) -eq 0 では、

  • gitの管理するファイル一覧の行数をカウントし、
  • ファイル数が0ならOK、
  • そうでない場合はエラーにする

という内容。

|| git rm -rf .

最後に注目すべきは、||でつなげてあるということ。
これにより、手前のtestが失敗している(= ファイルが残っている)なら実行するし、成功している(= ファイルがもうない)なら実行されない。

よって、エラーを吐かせずにリポジトリの中身がクリーンにできちゃう。