リポジトリに無視する必要のあるファイルがいくつかあります。それらを.gitignoreに追加しましたが、もちろん、それらは私のリポジトリから削除されません。
だから私の質問は、私の履歴を書き換えてこれらすべてのファイルを簡単に削除できるフィルターブランチを使用する魔法のコマンドまたはスクリプトはありますか?または単にそれらを削除するコミットを作成するコマンドですか?
リポジトリに無視する必要のあるファイルがいくつかあります。それらを.gitignoreに追加しましたが、もちろん、それらは私のリポジトリから削除されません。
だから私の質問は、私の履歴を書き換えてこれらすべてのファイルを簡単に削除できるフィルターブランチを使用する魔法のコマンドまたはスクリプトはありますか?または単にそれらを削除するコミットを作成するコマンドですか?
回答:
リポジトリから手動で削除できます:
git rm --cached file1 file2 dir/file3
または、多くのファイルがある場合:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
しかし、これはWindowsのGit Bashでは機能しないようです。エラーメッセージが表示されます。以下の方がうまくいきます:
git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
これらのファイルを使用せずに履歴全体を書き換えるということについては、自動で行う方法はないと思います。
そして、歴史を書き換えることは悪いことだと私たちは皆知っていますね。:)
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
トリックを行うようです
git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
どのOSでも機能する簡単な方法は、
git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"
基本的に、.gitignore内のファイルを除くすべてのファイルを読み取りました
.gitignore内のファイルは追跡されていないため、git cleanコマンドを使用して、バージョン管理されていないファイルを再帰的に削除できます。
ドライランgit clean -xdn
を実行し、何が除去されるかを確認するために使用します。
次に、を使用git clean -xdf
して実行します。
基本的に、git clean -h
またはman git-clean
(UNIXの場合)はあなたを助けます。
このコマンドは、ステージング領域にない新しいファイルも削除することに注意してください。
それが役に立てば幸い。
.gitignore
ていると言っています。
git clean -xdn
削除されません予行演習です。次の人がします。
私は.gitignoreステートメントの出力をsedで操作することにより、非常に簡単な解決策を実行しました。
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
説明:
sed
簡単ですか?
Linuxでは、次のコマンドを使用できます。
たとえば、「*。py〜」を削除したいので、コマンドは==>
find . -name "*.py~" -exec rm -f {} \;