ローカル ファイル システムからファイルを削除せずに、Git リポジトリからファイルを削除します。
-
16-09-2019 - |
質問
私の最初のコミットにはいくつかのログ ファイルが含まれていました。私は追加しました *log
わたしの .gitignore
, で、今度はリポジトリからログ ファイルを削除したいと思います。
git rm mylogfile.log
ファイルはリポジトリから削除されますが、ローカル ファイル システムからも削除されます。
このファイルをリポジトリから削除するにはどうすればよいですか それなし ファイルのローカルコピーを削除しますか?
解決
男ファイルでから:
--cached
が与えられると、、段階的なコンテンツは、ファイルがちょうどインデックスから削除されることを可能にする、枝の先端またはディスク上のファイルのいずれかと一致する必要があります。
ですから、単一のファイルについて:
git rm --cached mylogfile.log
と、単一のディレクトリ:
git rm --cached -r mydirectory
他のヒント
これを行う、(ReSharperのファイルのような)レポからフォルダ全体を削除するには:
git rm -r --cached folderName
私はいくつかのReSharperのファイルを犯した、そしてそれらは、他のプロジェクトのユーザーのために存続したくありませんでした。
また、ローカルファイルシステムからそれらを削除せずに、あなたの.gitignoreに基づいてリポジトリからファイルを削除することができます:
git rm --cached `git ls-files -i -X .gitignore`
あるいは、Windows PowerShellの上:
git rm --cached $(git ls-files -i -X .gitignore)
ここでの私の答えによると: https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
フォルダー/ディレクトリまたはファイルをローカルからではなく git リポジトリからのみ削除するには、3 つの簡単な手順を試してください。
ディレクトリを削除する手順
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
次回のコミットでそのフォルダーを無視する手順
次のコミットからそのフォルダーを無視するには、ルートに次の名前のファイルを 1 つ作成します。 .gitignoreそのフォルダー名をその中に入れます。好きなだけ入れられます
.gitignore ファイルは次のようになります
/FolderName
また、(例えば、パスワードを含むファイル)は、あなたは完全にリポジトリの履歴から、それを削除する必要があります。ここでそれを行う方法を説明するガイドです。 http://help.github.com/remove-sensitive-data/する
より一般的な解決策:
編集
.gitignore
ファイル。ECHO mylogfile.log >> .gitignore
インデックスからすべての項目を削除します。
git rm -r -f --cached .
インデックスを再構築します。
git add .
新しいコミットを作成する
git commit -m "Removed mylogfile.log"
Gitはあなたが彼らが変更されていないと仮定して、それらのファイルを無視することができます。この
git update-index --assume-unchanged path/to/file.txt
コマンドを実行することによって行われます。一度、このような、Gitの意志としてファイルをマーク 完全にそのファイル上のすべての変更を無視します。彼らは時に表示されません gitの状態やGitの差分を実行し、また彼らがこれまでにコミットされます。
( https://help.github.com/articles/ignoring-files をより)
このため、それを削除しませが、永遠にそれへの変更を無視します。 私は、これはローカルでのみうまくいくと思うので、彼らは上記と同じコマンドを実行しない限り、同僚はまだそれへの変更を見ることができます。 (それでもこのかかわらを確認する必要があります。)
注:これは直接質問に答えるのではなく、他の回答のコメント欄に質問をフォローアップに基づいています。
ファイルの追跡を解除するだけで、ローカルおよびリモート リポジトリからは削除しない場合は、次のコマンドを使用します。
git update-index --assume-unchanged file_name_with_path
答え上記は私のために動作しませんでした。私はすべてのコミットのファイルを削除するためにfilter-branch
を使用します。
とのgitリポジトリからファイルを削除します:
git filter-branch --tree-filter 'rm file'
とのgitリポジトリからフォルダを削除します
git filter-branch --tree-filter 'rm -rf directory'
これは、すべてのコミットからディレクトリやファイルを削除します。
あなたが使用してコミットを指定することができます:
git filter-branch --tree-filter 'rm -rf directory' HEAD
またはレンジます:
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
リモートにすべてをプッシュするためには、あなたが行うことができます:
git push origin master --force