すべてのファイルのフルパスを手動で入力せずに、いくつかのファイルを簡単に削除するにはどうすればよいgit rm
ですか?残しておきたい変更ファイルがたくさんあるので、変更したファイルをすべて削除することもできません。
また、手動で入力しなくても、いくつかのファイルの変更を元に戻すことができますgit checkout -- /path/to/file
。
にワイルドカードを指定できますgit rm
。
例えば
git rm *.c
または、すべてのファイルの名前を別のファイルに書き留めることもできます。たとえば、次のようにしますfilesToRemove.txt
。
path/to/file.c
path/to/another/file2.c
path/to/some/other/file3.c
これを自動化できます:
find . -name '*.c' > filesToRemove.txt
ファイルを開き、名前を確認します (問題がないことを確認します)。
それで:
cat filesToRemove.txt | xargs git rm
または:
for i in `cat filesToRemove.txt`; do git rm $i; done
その他のオプションについては、マンページを確認してくださいxargs
(特に、ファイルが多すぎる場合)。
他の方法 (Explorer など) を使用してそれらを削除し、実行しgit add -A
ます。複数のファイルを元に戻す場合は、ディレクトリをチェックアウトすることもできます。
git rm
のワイルドカードの扱いが煩わしいことがわかりました。検索は 1 行でトリックを実行できます
。ファイル名が置換される場所です
find . -name '*.c' -exec git rm {} \;
。{}
素晴らしい点find
は、名前だけでなく、多種多様なファイル属性でフィルタリングできることです。
POSIX システムでは、必要なすべてのファイルに一致するシェル glob を作成できます。それを単純にgit rm
およびに渡すことができますgit checkout --
。Windowsでは、cmd.exeとPowerShellにはグロビングが含まれておらず、それをアプリケーションにファームします(私が読んだことから、gitはファイルに対してそれを行いません)。同様の効果を得るには、Windows コマンドまたはスクリプトを使用してファイル リストを準備し、それを適切に git コマンドにパイプする必要があります。
ファイルのリストをシェル コマンドに渡すために使用する戦略は、ファイル パスを受け入れる git コマンドでも機能します。
Windows 10 では、Git Bash を使用.gitignore
して、ファイル構造内の場所から。
git rm -r --cached some_directory/
これを使用して、ディレクトリ全体を再帰的に無視しました。これは私の.gitignore
ファイルにあるものです:
# Use .gitignore to ignore a directory and its contents #
/some_directory/
以下を簡単に使用できます。
git add -u
公式ドキュメントより
-u --更新
一致するエントリがすでにあるインデックスを更新します。これにより、作業ツリーに一致するようにインデックス エントリが削除および変更されますが、新しいファイルは追加されません。
-u オプションを使用するときに no を指定すると、作業ツリー全体で追跡されているすべてのファイルが更新されます (Git の古いバージョンでは、更新を現在のディレクトリとそのサブディレクトリに制限するために使用されていました)。
つまり、この回答から、
作業ツリー全体から以前に追跡されたファイルを更新または削除します。新しいファイルは追加されません。
Windows で Unix/Linux/*BSD 機能の多くを提供するCygwinもチェックしてください。Cygwin には、Bash シェルと find(1) など、上記のツールが含まれています。(Cygwinが便利だと思うので、通常、Windows 7では一度に2〜4台のCygwin mintty端末を起動しています。)