web-dev-qa-db-ja.com

Gitリポジトリからのファイルの削除に失敗し、新しいバックアップを作成できません

次を実行して、リモートリポジトリからファイルを削除しようとしました。

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

しかし、Gitは

新しいバックアップを作成できません。以前のバックアップはrefs/original /に既に存在します
-fでバックアップを強制的に上書きします
rm:/.git-rewrite/backup-refsを削除できません:許可が拒否されました
rm:ディレクトリ/.git-rewriteを削除できません:ディレクトリが空ではありません

これは、Windowsで.git-rewriteディレクトリを既に削除した後です。

そのファイルを削除するにはどうすればよいですか?リポジトリにある29Mbファイルなので、ファイルを削除する必要があります。

git rebase -iのコミットを削除しようとしましたが、明らかにコミットが多くの異なるファイルに触れたため、Gitは競合を訴え、安全のために中断しました。

101
Cardin

既にフィルター分岐操作を実行しています。フィルターブランチの後、Gitは何かがうまくいかない場合に備えて、古いコミットへの参照を保持します。

それらは.git/refs/original/…で見つけることができます。そのディレクトリとその中のすべてのファイルを削除するか、-fフラグを使用してGitに古い参照を強制的に削除させます。

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
197
knittl

次のコマンドを使用して、元のバックアップを削除します。

git update-ref -d refs/original/refs/heads/master

これは、gitリポジトリをフィルター分岐するために使用したGistです: https://Gist.github.com/k06a/25a0214c98bc19fd6817

17
k06a

私は同じ問題を抱えていて、上の答えはそれを修正しませんでした。 .git/refs/original /ディレクトリが残っていません。私にとっての解決策は、.git/packed-refsファイルを削除することでした。

4
Yaron

フィルターブランチコマンドに力を追加します。

2
Adam Dymitruk