現在のGit作業ツリーからローカル(追跡されていない)ファイルを削除する方法


6843

現在の作業ツリーから追跡されていないローカルファイルをどのように削除しますか?


86
このインタラクティブなgitチートシートndpsoftware.com/git-cheatsheet.htmlは、gitワークスペースを示しています(Googleでは、「working copy」よりも「workspace」の方がより良い結果が得られます)。
qneill 2013

28
注:一部の追跡されてないファイルのみを削除すべてを削除したくない場合git cleanは、インタラクティブモードになりました。この他の質問への私の回答を参照しください:git 1.8.4+
VonC

17
ブランチはコミットへの参照であるため、追跡されていないファイルが含まれていないため、gitブランチからファイルを削除していないことに注意してください。これらは作業ディレクトリにのみ存在し、ブランチとは関係ありません。それはおそらく単に用語の説明です。
PavelŠimerda2014

6
初心者向けとGitの初心者向けの理解を明確にするために-git statusを実行し、ファイルが追跡されていないことを示し、そのファイルをリポジトリに入れたくない場合は、ファイルシステムに移動して削除または移動することができます。これは、ローカルリポジトリやGitに悪影響を及ぼすことはありません。git clean以下の回答の一部を使用することもできます。インタラクティブバージョンを使用して、選択したファイルのみを削除することもできますが、インタラクティブモードは面倒な場合があります。何をする場合でも、何git cleanを削除するのか、何を削除--dry-runせずにそれを使用して何を削除するのかを理解していることを確認してください。
LightCC

4
ファイルがまだ追跡されていない場合は、gitなしで削除できませんか?rm files-to-be-deleted
mhatch

回答:


8734

git- clean-作業ツリーから追跡されていないファイルを削除する

あらすじ

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​

説明

現在のディレクトリから始めて、バージョン管理されていないファイルを再帰的に削除して、作業ツリーをクリーンアップします。

通常、Gitに認識されていないファイルのみが削除され-xますが、このオプションを指定すると、無視されたファイルも削除されます。これは、たとえば、すべてのビルド製品を削除するのに役立ちます。

オプションの<path>...引数を指定すると、それらのパスのみが影響を受けます。


ステップ1では、-nオプションを使用して何が削除されるかを示します。

# Print out the list of files which will be removed (dry run)
git clean -n

クリーンステップ- 注意:これによりファイルが削除されます

# Delete the files from the repository
git clean -f
  • ディレクトリを削除するには、git clean -f -dまたはgit clean -fd
  • 無視されたファイルを削除するには、git clean -f -Xまたはgit clean -fX
  • 無視されたファイルと無視されていないファイルを削除するには、git clean -f -xまたはgit clean -fx

X後者の2つのコマンドの大文字と小文字の違いに注意してください

clean.requireForce構成で「true」(デフォルト)に設定されている場合は、指定する必要があります-f。指定しないと、実際には何も起こりません。

再度詳細についてはgit-cleanドキュメントを参照してください。


オプション

-f--force

Git構成変数clean.requireForceがfalseに設定されていない場合、git cleanは-f-nまたはが指定されていない限り、実行を拒否します-i

-x

.gitignore(ディレクトリごと)とから読み取られる標準の無視ルールを使用しないでください$GIT_DIR/info/exclude。ただし、-eオプションで指定された無視ルールは引き続き使用してください。これにより、ビルド製品を含むすべての追跡されていないファイルを削除できます。これを(おそらくgit resetと組み合わせて)使用して、クリーンビルドをテストするための初期の作業ディレクトリを作成できます。

-X

Gitによって無視されたファイルのみを削除します。これは、すべてを最初から再構築する場合に役立ちますが、手動で作成したファイルを保持します。

-n--dry-run

実際には何も削除せず、何が行われるかを示します。

-d

追跡されていないファイルに加えて、追跡されていないディレクトリを削除します。追跡されていないディレクトリが別のGitリポジトリによって管理されている場合、デフォルトでは削除されません。-fこのようなディレクトリを本当に削除したい場合は、オプションを2回使用してください。


288
git clean -f呼び出されたディレクトリ(およびサブディレクトリ)でのみ機能します。作業コピー全体をクリーンアップする場合は、そのルートディレクトリで呼び出す必要があります。
Eduardo Bezerra 2013年

17
また、.gitignore内のすべてのファイルを削除しています。新規で.gitignoreにないファイル/フォルダーのみを削除する必要がある
コスタノス

24
@Kostanos .gitignoreにあるファイルを削除したくない場合は、-xフラグを指定しないでください。
Lo-Tan

52
git clean -f :/ルートリポジトリディレクトリで実行したかのように動作します。また、サブモジュールでの会計処理後の答えも参照してくださいgit clean -ffxd :/
ここでは

18
@Michelle git clean -xfdは、現在.gitignoreで無視されているすべてのファイルも削除しますが、それらは回復できません
thedanotto

987

ディレクトリも削除さgit clean -f -dれることを確認するために使用します。

  1. 実際には何も削除せず、何が行われるかを示します。

    git clean -n
    

    または

    git clean --dry-run
    
  2. 追跡されていないファイルに加えて、追跡されていないディレクトリを削除します。追跡されていないディレクトリが別のGitリポジトリによって管理されている場合、デフォルトでは削除されません。-fこのようなディレクトリを本当に削除したい場合は、オプションを2回使用してください。

    git clean -fd
    

次に、ファイルが本当になくなったかどうかを確認できますgit status


115
先に述べたように、優れたドライ実行するようにしてgit clean -n -d
MS01

15
同じことが行うことですgit clean -ndgit clean -fd
マイサー2017

478

これまで誰もこれに言及しなかったのには驚きます。

git clean -i

これは対話型を表しており、影響を受けるファイルを含める/除外する可能性を提供して、何が削除されるかについての簡単な概要を取得します。全体として、--dry-run実際のクリーニングの前に必須を実行するよりもさらに速い

-d空のフォルダも処理したい場合は、トスする必要があります。最後に、それは素晴らしいエイリアスになります:

git iclean

そうは言っても、経験豊富なユーザーにとっては、インタラクティブなコマンドを手で持っておくのは面倒です。最近私はすでに述べただけを使いますgit clean -fd


16
@ pal4lifeこれは1.8.4で追加されましたが、古いバージョンのgitを実行している可能性がありますか?github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt
Mattias Backman

私はこれが好きです。誤ってctrl-rやctrl-pを実行しても、大したことではないので、他のどのオプションよりもbashの履歴にそれを置くほうが快適です。
csvoss

それはそれだろgit clean -i作業コピーのルートから呼び出された場合にのみ機能しますか?
アレッサンドロジャコプソン


250

追跡されていないディレクトリが独自のgitリポジトリ(サブモジュールなど)である場合は、-f2回使用する必要があります。

git clean -d -f -f


4
ところで、これはドキュメントに書かれています。2番目の-fが指定されない限り、Gitは.gitサブディレクトリまたはファイルを持つディレクトリの削除を拒否します。どっちにしても、ありがとうね!
Maxim Suslov、2015

248

追跡されていないファイルを削除する簡単な方法

すべての人跡未踏のファイルを削除するには、簡単な方法は、することです最初にそれらのすべてを追加し、レポをリセットし、次のように

git add --all
git reset --hard HEAD


8
あなたは置き換えることができますgit add --allによってgit add .。したがって、1行でより短い方法で行うことができますgit add . && git reset --hard HEAD (このコマンドは十分注意してください)
RousseauAlexandre

22
なぜこれを使用するのgit cleanですか?
user2864740 2017年

8
のでgit clean、明らかにも無視され、すべてを削除します。それはちょうど私のnode_modulesフォルダーを削除しました。これを行うと、無視されたファイルを除くすべてのファイルが最初にステージングされ、次にリセットを実行して削除されます。無視されたファイルは変更されません。
Andreas

5
@Andreas無視されたファイルは削除されません(git 2.14.1)。実際の削除を行う前に実行する必要がありgit clean -nます(またはを使用git clean -i)。
Qw3ry 2017

8
git clean-xまたは-Xオプションのいずれかを使用した場合にのみ、無視されたファイルを削除します。それ以外の場合は、追跡されていないファイルを削除します。
doubleDown 2017

140

git stash push -uすべて元に戻せるので気に入っていますgit stash pop

編集:また、追跡されていないファイルをスタッシュに表示する方法も見つけました(例:https ://stackoverflow.com/a/12681856/338986 git show stash@{0}^3

EDIT2:のgit stash save代わりに廃止されましたpush。@ script-wolfに感謝します。


3
隠し場所の-uについて説明できますか?私はそれがgit stash saveと異なる動作をする方法には従いません。私はこれを試してみましたが、うまくいきました。git docsを調べたところ、そこにも見つかりませんでした。
Winnemucca

9
-uと同等--include-untrackedです。のヘルプを見つけることができますgit help stash
hiroshi

3
@hiroshiありがとう!ダースの異なる人々からのすべての気の利いた解決策を試した後、これは最終的にうまくいったものです... git stashでもnadaを実行しました。保存-あなたは追跡されていないの世話をしました。ハード/ clean force / etcをリセットします。これらのどれも私にとって何もしませんでした。
killjoy

3
saveオプションはの賛成で廃止されましたpush同じですが、より多くありません。詳しくは、https://stackoverflow.com/questions/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952
Script Wolf

120

これは私がいつも使うものです:

git clean -fdx

非常に大きなプロジェクトの場合は、数回実行することをお勧めします。


@Martin私が取り組んでいるプロジェクトの1つは+8歳で、+ 80人の開発者が積極的にコーディングしています。Gitは、最初のパスでそれをクリーンアップできない場合があります。
Oscar Fraxedas 2016

1
これを確認できるので、2020年も有効です。私たちは大規模なプロジェクトにも取り組んでおり、削除するファイルがGITで見つからなくなるまで4〜5回実行する必要がありました。
ターボローカスト

90

git-cleanはあなたが探しているものです。作業ツリーから追跡されていないファイルを削除するために使用されます。


86

特定のサブディレクトリから追跡されていないファイルを削除する必要がある場合、

git clean -f {dir_path}

そして、追跡されていないdir / filesと無視されたファイルを削除する方法を組み合わせました。

git clean -fxd {dir_path}

この後、ファイルはでのみ変更されますgit status


68

このリポジトリ+サブモジュールの余分なフォルダーとファイルをすべて削除します

これにより、新しいクローンと同じ状態になります。

git clean -ffdx

このリポジトリのすべての余分なフォルダーとファイルを削除しますが、そのサブモジュールは削除しません

git clean -fdx

余分なフォルダーを削除しますが、ファイルは削除しません(例:ビルドまたはログフォルダー)

git clean -fd

余分なフォルダーと無視されたファイルを削除します(ただし、新しく追加されたファイルは削除されません)

ファイルが無視されておらず、まだチェックインされていない場合は、そのまま残ります。大文字のXに注意してください。

git clean -fdX

新しいインタラクティブモード

git clean

57

git clean -fd ディレクトリを削除します

git clean -fX 無視されたファイルを削除します

git clean -fx 無視されたファイルと無視されていないファイルを削除します

上記のすべてのオプションを組み合わせて使用​​できます

git clean -fdXx

詳細はgitマニュアルを確認してください


10
このコマンドgit clean -fdXxは、「致命的:-xと-Xは一緒に使用できません」というエラーメッセージを生成します(git-2.8を使用)。回答の最後の文については、gitマニュアルへのリンクを提供してください。乾杯
olibre

2つのコマンドを順に実行します:git clean -fdX、git clean -fdx
Clock ZHONG

55

OK、削除、不要な人跡未踏のファイルやフォルダを簡単に使用しているgitコマンドラインで、ちょうどこのようにそれを実行します。

git clean -fd

履歴を作成せずにファイルとフォルダーを削除するため、実行する前に再確認してください ...

この場合も、-f力を表し、-d表し、directory表します...

したがって、ファイルのみを削除したい場合は、 -fのみ。

git clean -f

あなたがしたい場合は 、削除(ディレクトリ)およびファイルを、あなたはこのようなだけ人跡未踏のディレクトリとファイルを削除することができます。

git clean -fd

また、-xgitによって無視されるファイルを含めるためにフラグを使用できます。これは、すべてを削除したい場合に役立ちます。

そして-iフラグを追加すると、gitは外出先でファイルを1つずつ削除する許可を求めます。

確信が持てず、最初に確認したい場合は、 -nフラグをます。

使用する -q削除が成功した後でレポートを表示したくない場合にします。

また、印象に残るように下の画像も作成しています。特に、-fフォルダのクリーニングで混乱したり、どういうわけか混同したりする人がたくさんいます。


不要な追跡されていないファイルとフォルダーの削除


その画像とは何ですか?
パセリエ

37

より良い方法は使用することです:git clean

git clean -d -x -f

これにより、(-d)によって無視されたディレクトリやファイルなど、追跡されていないファイルが削除されgit (-x)ます。

また、またはを対話モードで実行するには、-f引数を-nに置き換えます。これにより、何が削除されるかがわかります。dry-run-i


25

ユーザー対話型アプローチ:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i(インタラクティブ)
-f(強制)
-d(ディレクトリ)
-x(無視されたファイル)(必要に応じて追加

注: -nまたは--dry-run追加して、機能を確認します。


20

私が考案して試した(完全に機能する)そのような状況のライフハック:

git add .
git reset --hard HEAD

注意してください!これを実行する前に、(追跡されていないファイルでも)必要な変更コミットしてください。


3
少なくともこれは別のアプローチです。:)もう一つの方法は、削除されたファイルREFLOGではなく、任意の枝で覚えているだろうと、次のようになりますgit add . git commit -m 'about to delete' git reset --hard HEAD~
joeytwiddle

2
さらに迅速な方法はgit add . && git reset --hard HEAD
thybzi

3
git add . && git reset --hard
Pleymor

コミットしたい変更もある場合、これはあなたが望むものではないかもしれません。
lacostenycoder

@AlexanderMillsはgit reset --hardすべてのコミットされていない変更をリセットしますが、追跡されていないファイルは最新のコミットの状態にリセットします。だからこそ、私たち最初の必要性git add .- (彼らはあまりにも、リセットされて)すべての人跡未踏のファイルをステージ
thybzi

19

git clean -f -d -x $(git rev-parse --show-cdup)リポジトリディレクトリツリー内のどこに呼び出しても、ルートディレクトリにクリーンを適用します。現在使用しているフォルダーを離れることを強制せず、現在の場所からクリーンアップしてコミットできるので、私は常にそれを使用しています。

フラグがあることを確認してください-f-d-xあなたのニーズにマッチ:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

他にも利用可能なフラグがありますgit clean --help。確認してください。


ところで、git clean {flags}:/を実行するだけでよいので、
レポルートで

19

私だけのために働いた:

git clean -ffdx

他のすべての場合では、いくつかのサブディレクトリについて「スキップディレクトリ」というメッセージが表示されました。


2
ありがとう。私はを省略し、.gitignore内のファイルの消去を回避するために-x使用git clean -ffdしました。
Feckmore 2017年

15

「git status」によって追跡されていないものとしてリストされているファイルを削除したいだけの場合

git stash save -u
git stash drop "stash@{0}"

「git clean」ではgitによって無視されたファイルが削除されるため、次のビルドではすべてを再ビルドする必要があり、IDE設定も失われる可能性があるため、「git clean」よりもこれを好みます。


3
これにより、追跡されたファイルに対する有効な変更も削除されます。私はそれをお勧めしません。
code_dredd 16

2
ええ、あなたは最初に追跡されたファイルへの変更をコミットしたいでしょう。
jazzdev

14

実際に削除する前に何が削除されるかを知るには:

git clean -d -n

それは次のようなものを出力します:

sample.txtを削除します

前のコマンドの出力にリストされたすべてを削除するには:

git clean -d -f

それは次のようなものを出力します:

sample.txtを削除しています


11

追跡されていないファイルを削除するには、最初にコマンドを使用して、クリーニングの影響を受けるファイルを表示する必要があります

git clean -fdn

削除されるファイルのリストが表示されます。これらのファイルを実際に削除するには、次のコマンドを使用します。

git clean -fd

11

`git clean`コマンドの実行中は注意してください。

-n削除されるファイルが表示されるため、実際のコマンドを実行する前に必ず使用してください。

git clean -n -d 
git clean -f -d

デフォルトでgit cleanは、無視されない追跡されていないファイルのみが削除されます。.gitignoreまたは他の無視ファイルのパターンに一致するファイルは削除されません。これらのファイルも削除したい場合は-x、cleanコマンドにを追加できます。

git clean -f -d -x

また-i、cleanコマンドで使用できるインタラクティブモードもあります。

git clean -x -i

あるいは

コミットされていない作業を安全に削除することが100%確実でない場合は、代わりに隠し場所を使用できます

git stash --all

また、ディレクトリがクリアされますが、applyまたはpopでstashを使用して、いつでもファイルを取得できる柔軟性が得られます。その後、後で次の方法でスタッシュをクリアできます。

git stash drop // or clean

2
隠し場所は良いアイデアですが、使用したいかもしれませんgit stash save and type some comment as to what this stash was for
lacostenycoder


9

追跡されていないファイルをgit docsから削除するための推奨コマンドはgit cleanです

git clean-作業ツリーから追跡されていないファイルを削除します

推奨される方法: を使用しgit clean -i てインタラクティブモードを制御できるようにします。残りの利用可能なオプションを見てみましょう。

利用可能なオプション:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

説明:

1. -d

追跡されていないファイルに加えて、追跡されていないディレクトリを削除します。追跡されていないディレクトリが別のGitリポジトリによって管理されている場合、デフォルトでは削除されません。そのようなディレクトリを本当に削除したい場合は、-fオプションを2回使用します。

2. -f、-force

Git構成変数clean.requireForceがfalseに設定されていない場合、-f、-n、または-iを指定しない限り、git cleanは実行を拒否します。

3. -i、-interactive

何が行われるかを示し、ファイルをインタラクティブにクリーンアップします。詳細については、「インタラクティブモード」を参照してください。

4. -n、-dry-run

実際には何も削除せず、何が行われるかを示します。

5. -q、-quiet

静かにし、エラーのみを報告し、正常に削除されたファイルは報告しないでください。

6. -e、-exclude =

.gitignore(ディレクトリごと)および$ GIT_DIR / info / excludeにあるパターンに加えて、これらのパターンが有効な無視ルールのセットに含まれていることも考慮してください。

7. -x

.gitignore(ディレクトリごと)および$ GIT_DIR / info / excludeから読み取られる標準の無視ルールを使用しないでください。ただし、-eオプションで指定された無視ルールは引き続き使用してください。これにより、ビルド製品を含むすべての追跡されていないファイルを削除できます。これを(おそらくgit resetと組み合わせて)使用して、クリーンビルドをテストするための初期の作業ディレクトリを作成できます。

8. -X

Gitによって無視されたファイルのみを削除します。これは、すべてを最初から再構築する場合に役立ちますが、手動で作成したファイルを保持します。


私はあなたがタイプミスを持っていると思いますが、uggestedそれは単なる「uggestion笑」です
lacostenycoder

8

通常のgit cleanコマンドでは、私ので追跡されていないファイルは削除されませんgit version 2.9.0.windows.1

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

7

以下のgitコメントを使用することで、現在のgit作業ツリーからローカルの追跡されていないファイルを簡単に削除できます。

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

例:

git reset --hard HEAD

リンク:

  1. https://git-scm.com/docs/git-reset
  2. 「git reset --hard HEAD」を使用して以前のコミットに戻すにはどうすればよいですか?
  3. ローカルリポジトリブランチをリモートリポジトリHEADと同じようにリセットします
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

これにより、追跡されていないファイルだけでなく、コミット用にステージングされた変更も削除されます。
うるさい、

動作しません:一部のファイルを残します。git clean -ffdxソリューションです
ユージーンGr。Philippov

7

gitリポジトリとすべてのサブモジュールを再帰的にクリーンアップします

次のコマンドは、現在のgitリポジトリとそのすべてのサブモジュールを再帰的にクリーンアップします。

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

確かにこれは
十分に

6
git clean -f

現在のgitから追跡されていないファイルを削除します

git clean -fd

ディレクトリとファイルを削除したい場合、これは追跡されていないディレクトリとファイルのみを削除します


5

oh-my-zsh with zshは、gitプラグインを介してこれらの優れたエイリアスを提供します。それらはbashでも使用できます。

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • gclean 追跡されていないファイルに加えて追跡されていないディレクトリを削除します
  • gpristineローカルの変更をハードリセットし、追跡されていないディレクトリ、追跡されていないファイルを削除し、.gitignore(ディレクトリごと)および$ GIT_DIR / info / excludeから読み取られる標準の無視ルールを使用しませんが、-eオプションで指定された無視ルールを引き続き使用します。これにより、ビルド製品を含むすべての追跡されていないファイルを削除できます。これを(おそらくgit resetと組み合わせて)使用して、クリーンビルドをテストするための初期の作業ディレクトリを作成できます

2
フィードバックをありがとう、私の発言は混乱を招きました。強調表示されたエイリアスには、oh-my-zshが自動的に付けられると言いたいです。彼らは明らかに素晴らしい働きをしbashます。私はそれを反映するように私の回答を編集しました。
ZenLulz

4

私はgit stashコマンドを使用したいのですが、後で隠されたファイルと変更を取得できます。 git cleanも良いオプションですが、完全にあなたの要件に依存します。これはgit stashとgit cleanの説明です、7.3 Gitツール-StashingとCleaning

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.