Gitを使ったプロジェクトの場合、新たにディレクトリを作成したり、ファイルを作成すると、それらは、「Untracked files」(未追跡ファイル)として認識されます。
これらのファイルは変更を取り消すコマンドgit reset --hard @
や git checkout .
で消すことができません。
ここでは、これらの未追跡ファイルやディレクトリを削除する方法をまとめています。
実例:未追跡ファイルはgit reset –hardやgit checkoutで消せない
初めに、git reset –hardやgit checkoutでは未追跡ファイルを消せない事例を記載しておきます。
例えば以下のように、ステージング済みのファイル「text.txt」と未追跡のファイル「app/assets/stylesheets/articles.scss」があるとします。
#状態確認
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: test.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/assets/stylesheets/articles.scss
このファイルに、「git reset –hard @」を実行して、全ての変更を削除します。
$ git reset --hard @
HEAD is now at 9aa0fb6 [A]test.txt3
再度、git statusをして状態を確認します。
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/assets/stylesheets/articles.scss
nothing added to commit but untracked files present (use "git add" to track)
git addしたファイルは削除されていることがわかりますが、「Untracked files」がそのまま残っています。
未追跡ファイル(Untracked files)を削除する方法
未追跡ファイルは、git clean
で削除することができます。
ファイルを削除する場合と、ディレクトリごと削除する場合でそれぞれ使用するオプションが異なります。
未追跡のファイルを削除する方法
$ git clean -f
「-f」は「–force」と同じで、強制的に削除すると言う意味です。
未追跡のディレクトリを削除する方法
$ git clean -df
「-df」は「-d」と「-f」を合わせたオプションです。
「-f」は「–force」と同じで、強制的に削除すると言う意味です。
「-d」は再帰的に処理を行います。このため、ディレクトリなどは以下に複数のファイルやディレクトリが有る場合でも、それらの全てに対してgit cleanを実行することができるようになります。
実例(未追跡ファイルやディレクトリの削除)
例えば以下のように「Untracked files」に複数のファイルとディレクトリがあるとします。
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/assets/stylesheets/articles2.scss
app/assets/stylesheets/test.scss
app/views/articles2/
app/views/test/
nothing added to commit but untracked files present (use "git add" to track)
この状態で「git clean -f」を実行します。
$ git clean -f
Removing app/assets/stylesheets/articles2.scss
Removing app/assets/stylesheets/test.scss
すると、未追跡のファイルだけ削除されたことがわかります。
未追跡のディレクトリはそのまま残っている状態です。
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/views/articles2/
app/views/test/
nothing added to commit but untracked files present (use "git add" to track)
未追跡のディレクトリを削除するためには、git cleanコマンドで「-df」オプションを実行します。
$ git clean -df
Removing app/views/articles2/
Removing app/views/test/
すると、ディレクトリも削除できました。
git statusで確認すると完全にクリーンになっていることがわかります。
$ git status
On branch master
nothing to commit, working tree clean