リポジトリ内に無視すべきファイルがいくつかあります。それらを .gitignore に追加しましたが、もちろんリポジトリからは削除されません。
そこで質問なのですが、filter-branch を使用して履歴を書き換え、これらすべてのファイルを簡単に削除できる魔法のコマンドやスクリプトはありますか? それとも、単にそれらを削除するコミットを作成するコマンドでしょうか?
ベストアンサー1
リポジトリから手動で削除できます。
git rm --cached file1 file2 dir/file3
または、ファイルがたくさんある場合は、次のようにします。
git rm --cached `git ls-files -i -c --exclude-from=.gitignore`
しかし、これは Windows 上の Git Bash では機能しないようです。エラー メッセージが生成されます。次の方法の方がうまく機能します (-d '\n'
入力を 1 行ずつ分割するため):
git ls-files -i -c --exclude-from=.gitignore | xargs -d '\n' git rm --cached
Windows で PowerShell を使用している場合も、これは機能します (パスとファイル名のスペースを処理します)。
git ls-files -i -c --exclude-from=.gitignore | %{git rm --cached $_}
これらのファイルなしで履歴全体を書き換えることに関しては、それを自動的に行う方法があるとは到底思えません。
そして、履歴を書き換えるのは良くないことだということは、私たち全員が知っていますよね? :)