从Git存储库中清除文件失败,无法创建新备份


116

我尝试通过运行以下命令从远程存储库中删除文件:

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抱怨冲突,因此我中止以确保安全。


1
对于搜索引擎:当您的错误消息为时,这也可能适用.git-rewrite already exists, please remove it
Drew Noakes 2015年

Answers:


218

您已经执行了过滤分支操作。过滤器分支之后,Git保留对旧提交的引用,以防出现问题。

您可以在中找到这些.git/refs/original/…。删除该目录及其中的所有文件,或者使用该-f标志强制Git删除旧引用。

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

10
终于成功了,谢谢!我确实尝试了-f标志,但是问题是我将其放在命令末尾。头-f。看到您的命令后,我尝试将标志放在开头,并且成功了!= D
Cardin

12
选项标志(-f)放在参考(HEAD)之前。裁判走到最后
knittl 2011年

添加-f并删除目录后,仍然出现相同的错误。有任何想法吗?
Yaron 2015年

1
@knittl,我不是在指git add。即使删除了.git/refs/original/文件夹并-fgit filter-branch命令中使用了标志,我仍然收到与原始海报相同的错误。就我而言,解决方案是删除.git/packed-refs文件。
Yaron 2015年

1
@knittl,我找到了解决方法,但没有发现问题所在。基本上,我添加--ignore-unmatch了命令git rm,一切顺利!
百利修斯2015年

21

使用此命令删除原始备份:

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

这是我用来过滤分支仓库的要点:https : //gist.github.com/k06a/25a0214c98bc19fd6817


这是删除备份的正确解决方案!删除.git/refs/original/不能解决问题。
埃里克·库普曼斯

确保将“ master”更改为您要修复的分支。在我的案例中为“ develop”
Damian Green

git show-ref | awk '/ refs.original.refs/{print$2}'查找仓库中的所有备份。

4

我有同样的问题,上面的答案没有解决。尚无.git / refs / original /目录。对我来说,解决方案是删除.git / packed-refs文件。


同样的问题。没有.git/packed-refs文件,然而,没有文件夹original.git/refs。任何人?
XedinUnknown 2015年

解决这里通过添加-r标志命令。
XedinUnknown 2015年

这里同样的问题。删除packed-refs解决了该问题,但同时也破坏了我的git目录的其余部分,因此我不得不从备份中恢复。
凯文·尹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.