コミット後の.gitignore


210

Githubでホストされているgitリポジトリがあります。多くのファイルをコミットした後、ファイルを作成.gitignoreして除外する必要があることに気付きました。.exe.obj

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?それを強制する方法はありますか?


6
将来のグーグルはこれが非常に役立つと思うかもしれません。簡潔で要点:git-tower.com/learn/git/faq/ignore-tracked-files-in-git
Austin Dean

回答:


331

いいえ、リポジトリに既にコミットされているファイルを強制的に削除することはできません。 .gitignore

あなたはする必要がありgit rm --cachedますが、レポにしたくないファイルを削除します。(おそらくローカルコピーを保持したいがリポジトリから削除したいので--cachedです。)したがって、リポジトリからすべてのexeを削除したい場合は、

git rm --cached /\*.exe

(アスタリスク*はシェルから引用されていることに注意してください-これにより、シェルではなくgitがファイルとサブディレクトリのパス名を展開できます)


6
@Madhur Ahuja実際に実行git rm /\*.exeすると、リポジトリ内のすべてのexeが削除されます
manojlds

4
/ \は何のためにありますか?
コスタ

5
@Costaアスタリスクをエスケープしてシェルがそれを解釈しないようにするためのものですgit
ランバート、2016

2
警告:ファイルはローカルに保持されます。これは本当です...しかし、a git pullを実行している他のユーザーには、ファイルが削除されたことが表示されます。
ByScripts、

42

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?

いいえ。既存のものでも.gitignore-f(無視される)ファイルを(強制)フラグでステージングできます。それらのファイルがすでにコミットされている場合、それらは自動的に削除されません。

git rm --cached path/to/ignored.exe

それは、各.exeを個別に削除することを意味しますか
Madhur Ahuja '30

あなたはおそらくこれをバッチ処理することができますが、私はこれがWindowsでどのように機能するかわかりません
KingCrunch

30

まだ変更をプッシュしていない場合:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git push

15

.ideaとターゲットフォルダーを削除する必要があり、すべてのコメントを読んだ後、これは私のために働きました:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

そしてマスターにプッシュする


.idea私の問題だったと思います:)
Olivier Pons

5

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?

番号。

これを行うための「最良の」レシピはgit filter-branch、ここに書かれているように使用しています:

git-filter-branchのmanページには、包括的な例が含まれています。

履歴を書き直すことになります。誤って追加したファイルを含むリビジョンを公開した場合、これらのパブリックブランチのユーザーに問題が発生する可能性があります。それらを通知するか、ファイルを削除する必要がどれほどひどいかを考えてください。

タグがある場合は、常に--tag-name-filter catオプションを使用してくださいgit filter-branch。痛いことはなく、後で必要になったときに頭痛を軽減できます


このコマンドを実行したところ、Rewrite 57c1f1f04a3ed01f50c3260714cfc82c973ac816(3/3)と表示されました。警告:参照 'refs / heads / master'は変更されておらず、何も起こりませんでした
Madhur Ahuja

これは警告であり、ほとんどの場合、masterブランチには削除するファイルのリビジョンが(まだ)含まれていませんでした。簡単に確認できます。問題がある場合は、質問を更新してください。PS: - --allを使用して、すべての(ローカル)ブランチを一度に書き換えます
sehe

1

ファイルを削除してコミットした後でも、それらのファイルは履歴に残ります。それらを削除するには、BFG Repo-Cleanerの使用を検討してください。git-filter-branchの代替です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.