【问题标题】:Purging file from Git repo failed, unable to create new backup从 Git 存储库清除文件失败,无法创建新备份
【发布时间】: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 时,这也可能适用。

标签: git git-commit git-filter-branch git-rewrite-history


【解决方案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】:

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

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 2017-05-24
    • 1970-01-01
    • 2017-02-09
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多