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

Posted

技术标签:

【中文标题】从 Git 存储库清除文件失败,无法创建新备份【英文标题】:Purging file from Git repo failed, unable to create new backup 【发布时间】:2011-09-18 05:12:53 【问题描述】:

我试图通过运行从我的远程仓库中删除一个文件:

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-rewrite already exists, please remove it 时,这也可能适用。 【参考方案1】:

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

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

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

【讨论】:

这是删除备份的正确解决方案!删除.git/refs/original/ 并不能解决问题。 确保将“master”更改为您尝试修复的分支。在我的情况下为“develop” git show-ref | awk '/ refs.original.refs/print$2' 查找您的仓库拥有的所有备份。【参考方案2】:

我遇到了同样的问题,上面的答案没有解决。没有 .git/refs/original/ 目录了。我的解决方案是删除 .git/packed-refs 文件。

【讨论】:

同样的问题。但是,没有.git/packed-refs 文件,并且.git/refs 中没有文件夹original。有人吗? 通过在命令中添加-r 标志解决了here。 这里有同样的问题。删除 packed-refs 解决了这个问题,但它也破坏了我的 git 目录的其余部分,我不得不从备份中恢复。【参考方案3】:

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

您可以在.git/refs/original/… 中找到它们。要么删除该目录和其中的所有文件,要么使用 -f 标志强制 Git 删除旧的引用。

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

【讨论】:

终于可以使用了,谢谢!我确实尝试了 -f 标志,但问题是我将它放在命令的末尾,例如。头-f。看到你的命令让我试着把旗帜放在开头,它奏效了! =D 选项标志 (-f) 位于裁判 (HEAD) 之前。裁判到最后 添加 -f 并删除目录后,我仍然遇到同样的错误。有什么想法吗? @knittl,我指的不是git add。即使在删除.git/refs/original/ 文件夹并在git filter-branch 命令中使用-f 标志后,我仍收到与原始海报相同的错误。就我而言,解决方案是删除 .git/packed-refs 文件。 @knittl,我找到了解决方法,但没有找到问题所在。基本上,我在命令git rm 中添加了--ignore-unmatch,并且进展顺利!【参考方案4】:

向过滤器分支命令添加强制。

【讨论】:

以上是关于从 Git 存储库清除文件失败,无法创建新备份的主要内容,如果未能解决你的问题,请参考以下文章

彻底清除git所有历史提交记录使其为“新”库

如何完全清除 git 存储库,而不删除它

即使清除缓存 laravel 后视图也不刷新

text 清除git / github存储库历史的步骤

如何从 Maven 存储库中清除旧的依赖项?

如何在 VSTS 2019 中清除最近打开的 Git 分支