以下は、現在の除外パターンのセットで無視されるファイルを「追跡解除」する1つの方法です。
(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
これにより、ファイルは作業ディレクトリに残りますが、インデックスから削除されます。
ここで使用されるトリックは、存在しないインデックスファイルをgit ls-filesに提供して、追跡されているファイルがないと見なすことです。上記のシェルコードは、インデックスが空の場合に無視されるすべてのファイルを要求し、git rmを使用して実際のインデックスから削除します。
ファイルが「追跡解除」された後、git statusを使用して、重要なものが何も削除されていないことを確認します(その場合、除外パターンを調整し、git reset-pathを使用して、削除されたインデックスエントリを復元します)。次に、「基本」を除外した新しいコミットを作成します。
「クルド」は、古いコミットに残っています。きれいな履歴が本当に必要な場合は、git filter-branchを使用して古いコミットのきれいなバージョンを作成できます(git filter-branchを使用するnbは「履歴を書き換える」ため、プルしたコラボレーターがいる場合は軽く実行しないでください。 「クルド」が最初に導入された後の過去のコミットのいずれか)。
git rm --cached
は、-r
オプションでディレクトリ全体を作成できます