追跡されていないローカル ファイルを現在の作業ツリーから削除するにはどうすればよいですか?
41 に答える
git-clean - 作業ツリーから追跡されていないファイルを削除します
あらすじ
git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…
説明
現在のディレクトリから開始して、バージョン管理下にないファイルを再帰的に削除することにより、作業ツリーをクリーンアップします。
通常はGitに認識されていないファイルのみ削除されますが、
-x
オプションを指定すると無視されたファイルも削除されます。これは、たとえば、すべてのビルド プロダクトを削除するのに役立ちます。オプションの
<path>...
引数が指定されている場合、それらのパスのみが影響を受けます。
-n
ステップ 1 は、オプションを使用して削除されるものを表示することです。
# Print out the list of files and directories which will be removed (dry run)
git clean -n -d
クリーンステップ -注意: これによりファイルが削除されます:
# 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 に設定されていない場合
-f
、 、-n
またはが指定されない限り、git clean は実行を拒否します-i
。
-x
.gitignore (ディレクトリごと) および から読み取られる標準の無視ルールを使用しないでください
$GIT_DIR/info/exclude
。ただし、オプションで指定された無視ルールを引き続き使用し-e
ます。これにより、ビルド プロダクトを含む、追跡されていないすべてのファイルを削除できます。これを (おそらく git reset と組み合わせて) 使用して、元の作業ディレクトリを作成し、クリーン ビルドをテストできます。
-X
Git によって無視されたファイルのみを削除します。これは、すべてを最初から再構築するのに役立つ場合がありますが、手動で作成したファイルは保持してください。
-n
、--dry-run
実際には何も削除せず、何が行われるかを示すだけです。
-d
追跡されていないファイルに加えて、追跡されていないディレクトリを削除します。追跡されていないディレクトリが別の Git リポジトリによって管理されている場合、デフォルトでは削除されません。
-f
そのようなディレクトリを本当に削除したい場合は、オプションを 2 回使用してください。
これまで誰もこれについて言及していなかったことに驚いています:
git clean -i
これはインタラクティブの略で、影響を受けるファイルを含めたり除外したりする可能性を提供して、削除されるものの概要をすばやく取得します。全体として、--dry-run
実際のクリーニングの前に必須を実行するよりもまだ高速です。
-d
空のフォルダーも処理したい場合は、を投げる必要があります。最後に、素敵なエイリアスになります。
git iclean
そうは言っても、インタラクティブなコマンドを余分に手に持つことは、経験豊富なユーザーにとっては疲れる可能性があります. 最近は、すでに述べたものを使用していますgit clean -fd
追跡されていないファイルを削除する簡単な方法
追跡されていないすべてのファイルを削除するには、最初にそれらすべてを追加し、以下のようにリポジトリをリセットするのが簡単な方法です
git add --all
git reset --hard HEAD
追跡されていないディレクトリがそれ自体のgitリポジトリ(サブモジュールなど)である場合は、次の-f
2回使用する必要があります。
git clean -d -f -f
git stash push -u
ですべて元に戻せるので気に入っていますgit stash pop
。
編集:また、追跡されていないファイルを隠し場所に表示する方法を見つけました(例git show stash@{0}^3
) https://stackoverflow.com/a/12681856/338986
EDIT2:git stash save
を支持して非推奨ですpush
。ありがとう@script-wolf。
これは私がいつも使っているものです:
git clean -fdx
非常に大規模なプロジェクトの場合、数回実行する必要がある場合があります。
git-cleanはあなたが探しているものです。作業ツリーから追跡されていないファイルを削除するために使用されます。
特定のサブディレクトリから追跡されていないファイルを削除する必要がある場合は、
git clean -f {dir_path}
また、追跡されていないディレクトリ/ファイルと無視されたファイルを削除する方法を組み合わせました。
git clean -fxd {dir_path}
この後は、 でのみファイルを変更しますgit status
。
git clean -fd
ディレクトリを削除します
git clean -fX
無視されたファイルを削除します
git clean -fx
無視されたファイルと無視されていないファイルを削除します
上記のすべてのオプションを次のように組み合わせて使用できます
git clean -fdXx
詳細については、git マニュアルを確認してください
より良い方法は、次を使用することです: git clean
git clean -d -x -f
(-d)
これにより、によって無視されるディレクトリやファイルなど、追跡されていないファイルが削除されgit (-x)
ます。
また、-f
引数をorに置き換えて対話モード-n
を実行すると、何が削除されるかがわかります。dry-run
-i
私にとっては、以下のみが機能しました:
git clean -ffdx
他のすべてのケースでは、一部のサブディレクトリに対して「ディレクトリをスキップしています」というメッセージが表示されました。
git clean -f -d -x $(git rev-parse --show-cdup)
clean は、リポジトリ ディレクトリ ツリー内のどこで呼び出しても、ルート ディレクトリに適用されます。現在作業しているフォルダーを離れることを強制せず、現在の場所からすぐにクリーンアップしてコミットできるため、私は常にそれを使用しています。
フラグ-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 add .
git reset --hard HEAD
「git status」によって追跡されていないとリストされているファイルを削除したいだけの場合
git stash save -u
git stash drop "stash@{0}"
「git clean」は git によって無視されたファイルを削除するため、「git clean」よりもこれを好みます。そのため、次のビルドではすべてを再構築する必要があり、IDE 設定も失われる可能性があります。
git add --all
、git stash
およびgit stash drop
、追跡されていないファイルをすべて削除するには、これら 3 つのコマンドをこの順序で試してください。追跡されていないファイルをすべて git に追加してそれらをスタッシュすると、追跡されていないすべてのファイルがスタッシュ リストに移動し、一番上のファイルが削除されます。つまり、stash@{0} は、スタッシュされた変更をスタッシュ リストから削除します。
以下の git コメントを使用して、現在の git 作業ツリーからローカルの追跡されていないファイルを簡単に削除できます。
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
例:
git reset --hard HEAD
リンク :
git リポジトリとすべてのサブモジュールを再帰的に消去する
次のコマンドは、現在の git リポジトリとそのすべてのサブモジュールを再帰的に消去します。
(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
git reset HEAD <file>
ファイルのアンステージに使用
使用法: git clean [-d] [-f] [-i] [-n] [-q] [-e] [-x | -バツ] [ - ] ...
-q, --quiet do not print names of files removed
-n, --dry-run dry run
-f, --force force
-i, --interactive interactive cleaning
-d remove whole directories
-e, --exclude <pattern>
add <pattern> to ignore rules
-x remove ignored files, too
-X remove only ignored files