無視する必要があるgitリポジトリのすべてのコミットされたファイルを削除します。

無視する必要があるgitリポジトリのすべてのコミットされたファイルを削除します。

私は最近gitリポジトリを起動しましたが、.gitignoreファイルを追加するのを忘れました。初めてコミットした後、リポジトリには無視する必要があるサブディレクトリとファイルがたくさんあります。.gitignoreGitLabやGitHubなどのツールにファイルを省略せずにリポジトリを追加してからプッシュする効率的な方法はありますか?

答え1

作業ディレクトリから無視されたすべてのファイルを削除してもかまいません。次のコマンドは削除のためにコミットされましたが、無視されたすべてのファイルを準備します。

find . -print0 | git check-ignore -z --stdin --no-index | xargs -0 git rm -f -r --cached --ignore-unmatch --

(GNUfindと最新バージョンであると仮定gitgit check-ignoreまた、無視された他のファイルやディレクトリも削除されます。

これは、現在のディレクトリから始まるすべてのファイルとディレクトリを一覧表示し、無視されるか(コミットされている場合でも)確認し、コミットされているか、追跡されていないかを問わず削除します。

これは.gitignoreツリー内のすべてのファイルに適用されます(git設定の他の場所でも可能です)。

変更を追跡してコミットします。変更は新しいコミットなので、強制的にプッシュする必要はありません。無視されたと推定されるファイルへのすべての参照を削除するために履歴を書き換えるのは、やや複雑な作業です。

関連情報