我尝试通过运行以下命令从远程仓库中删除文件:
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抱怨冲突,我为了安全而中止了。
答案 0 :(得分:192)
您已经执行过滤分支操作。在filter-branch之后,Git会保持对旧提交的引用,以防出现问题。
您可以在.git/refs/original/…
中找到这些内容。删除该目录及其中的所有文件,或使用-f
标志强制Git删除旧引用。
git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
答案 1 :(得分:16)
使用此命令删除原始备份:
git update-ref -d refs/original/refs/heads/master
以下是我用来过滤分支我的git仓库的要点:https://gist.github.com/k06a/25a0214c98bc19fd6817
答案 2 :(得分:4)
我遇到了同样的问题,上面的答案没有解决。没有.git / refs / original /目录。我的解决方案是删除.git / packed-refs文件。
答案 3 :(得分:2)
向过滤器分支命令添加强制。