Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【Git】git clean でGit管理対象外の差分ファイルを削除する

git clean

新規に作成したファイルなど、一度もGitによって管理されたことのないファイルは
git clean -fコマンドで削除できます。

# git上で管理されていないファイル/フォルダ
$ git status
On branch hoge
Your branch is up to date with 'origin/hoge'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    test

nothing added to commit but untracked files present (use "git add" to track)

# Git管理外ファイル削除
$ git clean -f
Removing test

-fオプションを指定するのは、デフォルトではgit cleanをオプションなしで実行できないためです。 あまりお勧めはできませんが、.gitconfigファイルまたは.git/configファイルで以下のように設定すれば-fオプション指定は不要になります。 (前者はglobal,後者はlocalなconfig設定ファイルです)

clean.requireForce=false

また、git clean -nで削除されるファイル名を確認することができます。

 $ git clean -n
Would remove test

git clean -fではディレクトリを削除することができません。 ディレクトリを削除する場合は-dオプションを指定します。

# ディレクトリが管理外
$ git status
On branch hoge
Your branch is up to date with 'origin/hoge'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    hoge/

nothing added to commit but untracked files present (use "git add" to track)

# Git管理外ディレクトリを削除
$ git clean -d -f 
Removing hoge/

Gitで管理対象内ファイルの差分削除

ちなみに、既に管理されているファイルであればgit checkout ファイル名でステージングされていない差分(git statusで赤色の部分)を削除できます 。

# カレントディレクトリ配下のすべての差分を削除
$ git checkout .

またステージングされている場合も、一旦git reset HEAD .で差分をアンステージングすれば削除できます。

# カレントディレクトリ配下の、すでにステージングされている差分をアンステージング
$ git reset HEAD .
# カレントディレクトリ配下のすべての差分を削除
$ git checkout .

別の方法として、git stashからのgit stash drop stash@{1}でステージング・アンステージング関係なく差分を削除できます。

$ git stash
$ git stash drop stash@{1}