web-dev-qa-db-ja.com

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

私の最初のコミットはいくつかのログファイルを含んでいました。私は*log.gitignoreを追加しました、そして今私は自分のリポジトリからログファイルを削除したいです。

git rm mylogfile.log

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

どのように私はリポジトリからこのファイルを削除することができますwithoutファイルのローカルコピーを削除しますか?

2755
mveerman

Manファイルから:

--cachedが与えられたとき、ステージングされた内容はブランチの先端かディスク上のファイルのどちらかと一致しなければならず、ファイルがインデックスから削除されることを可能にします。

だから、単一のファイルの場合:

git rm --cached mylogfile.log

そして単一のディレクトリの場合:

git rm --cached -r mydirectory
3915
bdonlan

(Resharperファイルのように)リポジトリからフォルダ全体を削除するには、次の操作を行います。

git rm -r --cached folderName

私はいくつかのresharperファイルをコミットしました、そして、それらが他のプロジェクトユーザのために固執したくないです。

260
Sam Tyson

ローカルファイルシステムからファイルを削除せずに、.gitignoreに基づいてリポジトリからファイルを削除することもできます。

git rm --cached `git ls-files -i -X .gitignore`

あるいは、Windows Powershellでは、次のようにします。

git rm --cached $(git ls-files -i -X .gitignore)
185
Techbrunch

ここに私の答えごとに: 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

次回のコミットでそのフォルダを無視する手順

次回のコミットでそのフォルダを無視するには、ルートに .gitignore という名前のファイルを1つ作成し、その中にそのフォルダ名を入れます。あなたは好きなだけ置くことができます

.gitignore fileはこのようになります。

/FolderName

remove directory

73
eirenaios

また、機密データ(パスワードを含むファイルなど)をコミットした場合は、それをリポジトリの履歴から完全に削除する必要があります。これを行う方法を説明するガイドは次のとおりです。 http://help.github.com/remove-sensitive-data/

67
BoD

より一般的な解決策:

  1. .gitignoreファイルを編集します。

    ECHO mylogfile.log >> .gitignore

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

    git rm -r -f --cached .

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

    git add .

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

    git commit -m "Removed mylogfile.log"

59
mAsT3RpEE

Gitでは、これらのファイルは変更されていないと見なして無視できます。これはgit update-index --assume-unchanged path/to/file.txtコマンドを実行することによって行われます。ファイルをそのようにマークすると、gitはそのファイルに対する変更を完全に無視します。 git statusやgit diffを実行しても表示されず、またコミットされることもありません。

https://help.github.com/articles/ignoring-files から)

したがって、それを削除するのではなく、それに対する変更を永久に無視します。これはローカルでしか機能しないと思いますので、同僚は上記と同じコマンドを実行しない限り、変更を確認できます。 (それでもこれを検証する必要があります。)

注:これは質問に直接回答するのではなく、他の回答のコメント内のフォローアップ質問に基づいています。

21
Rystraum

ファイルをアントラックするだけで、ローカルおよびリモートのリポジトリから削除したくない場合は、次のコマンドを使用します。

git update-index --assume-unchanged  file_name_with_path
8
Afraz Ahmad

上記の答えは私にはうまくいきませんでした。 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
5
Martijn Mellens