ローカル ファイル システムからファイルを削除せずに、Git リポジトリからファイルを削除します。

StackOverflow https://stackoverflow.com/questions/1143796

質問

私の最初のコミットにはいくつかのログ ファイルが含まれていました。私は追加しました *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

remove directory

あなたが機密データをコミットしている場合は、

また、(例えば、パスワードを含むファイル)は、あなたは完全にリポジトリの履歴から、それを削除する必要があります。ここでそれを行う方法を説明するガイドです。 http://help.github.com/remove-sensitive-data/する

より一般的な解決策:

  1. 編集 .gitignore ファイル。

    ECHO mylogfile.log >> .gitignore

  2. インデックスからすべての項目を削除します。

    git rm -r -f --cached .

  3. インデックスを再構築します。

    git add .

  4. 新しいコミットを作成する

    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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top