2011-09-29 3 views
21

gitリポジトリから不要なファイルを削除しようとしています。そのファイルは最初に追加され、現在は複数のブランチにあります。私が望むのは、単にそのファイルの変更を追跡するのを止めるだけです。私は変更がそこにとどまるべきではないが、ファイルシステムにとどまるためにはそのファイルが必要です。gitリポジトリからファイルを削除しますが、ファイルシステムに残しておきます

私は

git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD 

次試みたが、ファイルシステムから削除されたファイルが不要である何それ。

+1

私は通常、そのコマンドを実行する前に、どこかにファイルをコピーします。 gitがそれらを削除した後、それらを.gitignoreに追加してコピーを元に戻します。 –

+0

うーん、素敵なハック。私はそれについて考えていない –

+1

@mishaあなたはそれらを追跡するのをやめたいのですか、それともそれらをリポジトリから完全に削除しますか?あなたはあなたの質問に1つのことを言い、コメントの中にもう1つ言います。 – Andy

答えて

27

ジャスト:もちろん

git rm --cached file [file ...] 

あなたは、ファイルを保存したい場合はそう、彼らはすぐに

+1

私はそれらをすべてのブランチからリポジトリから完全に削除したいと思っています。私が言うように、ファイルは追跡されなくなりましたが、私はブランチを切り替えることができません。 'ファイルレベルのマージが必要です。ブランチ 'に滞在してください。 –

2

をrecommittedされません、問題のファイルは、あなたの.gitignoreに追加されていることを確認する必要があります
git update-index --assume-unchanged <fileName>

これは、インデックス内のファイルの現在のバージョンを保持しますが、あなたはそれあなたが望むすべてを変更することができますし、gitのは、これらの茶を無視します:リポジトリには、使用することができますnges。

+0

私は彼のアプローチが**一時的な**回避策としてのみ良いことを発見しました。ファイルの内容が現在のブランチの内容と異なる別のブランチをチェックアウトできないようになります。 –

0

チェックアウトして実行git clean各ブランチに対応します。

のgit - クリーン - ワーキングツリー

から人跡未踏のファイルを削除し、現在のディレクトリから始めて、再帰的にバージョン管理下にないファイルを削除することで作業ツリーをクリーニングします。

https://git-scm.com/docs/git-clean

関連する問題