次を実行して、リモートリポジトリからファイルを削除しようとしました。
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は競合を訴え、安全のために中断しました。
既にフィルター分岐操作を実行しています。フィルターブランチの後、Gitは何かがうまくいかない場合に備えて、古いコミットへの参照を保持します。
それらは.git/refs/original/…
で見つけることができます。そのディレクトリとその中のすべてのファイルを削除するか、-f
フラグを使用してGitに古い参照を強制的に削除させます。
git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
次のコマンドを使用して、元のバックアップを削除します。
git update-ref -d refs/original/refs/heads/master
これは、gitリポジトリをフィルター分岐するために使用したGistです: https://Gist.github.com/k06a/25a0214c98bc19fd6817
私は同じ問題を抱えていて、上の答えはそれを修正しませんでした。 .git/refs/original /ディレクトリが残っていません。私にとっての解決策は、.git/packed-refsファイルを削除することでした。
フィルターブランチコマンドに力を追加します。