Githubでホストされているgitリポジトリがあります。多くのファイルをコミットした後、.gitignore
を作成し、.exe
、.obj
ファイルを除外する必要があることに気付きました。
ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?それを強制する方法はありますか?
いいえ、.gitignore
に追加されたという理由だけで、リポジトリで既にコミットされているファイルを強制的に削除することはできません。
リポジトリに不要なファイルを削除するには、git rm --cached
する必要があります。 (--cachedは、おそらくローカルコピーを保持するが、リポジトリからは削除する必要があるためです。)したがって、リポジトリからすべてのexeを削除する場合は、
git rm --cached /\*.exe
(アスタリスク*がシェルから引用されていることに注意してください-これにより、シェルではなくgitがファイルとサブディレクトリのパス名を展開できます)
ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?
いいえ。既存の.gitignore
を使用しても、-f
(強制)フラグを使用して「無視された」ファイルをステージングできます。ファイルがすでにコミットされている場合、それらは自動的に削除されません。
git rm --cached path/to/ignored.exe
変更をまだプッシュしていない場合:
git rm -r --cached .
git add .
git commit -m 'clear git cache'
git Push
.ideaフォルダーとターゲットフォルダーを削除する必要があり、すべてのコメントを読んだ後、これは私にとってうまくいきました:
git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'
そして、マスターにプッシュ
ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?
番号。
これを行うための「最良の」レシピは、ここで書かれているようにgit filter-branch
を使用することです:
Git-filter-branchのmanページには包括的な例が含まれています。
注履歴を書き換えます。誤って追加されたファイルを含むリビジョンを公開した場合、これらのパブリックブランチのユーザーに問題が発生する可能性があります。通知するか、ファイルを削除する必要があるかどうかを考えてください。
注タグがある場合は、--tag-name-filter cat
オプションにgit filter-branch
オプションを常に使用してください。それは決して痛くないし、後でそれを必要とすることに気づいたときにあなたの頭痛を救います
ファイルを削除してコミットした後でも、それらのファイルは履歴に残ります。これらを削除するには、 BFG Repo-Cleaner の使用を検討してください。 git-filter-branchの代替です。