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

发布于 2024-11-15 22:32:52 字数 509 浏览 4 评论 0原文

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

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 抱怨存在冲突,为了安全起见,我中止了。

I tried to remove a file from my remote repo by running:

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

But Git complains that

Cannot create new backup. A previous backup already exists in refs/original/
Force overwriting the backup with -f
rm: cannot remove /.git-rewrite/backup-refs : Permission denied
rm: cannot remove directory /.git-rewrite : Directory not empty

This was after I already deleted the .git-rewrite directory on Windows.

How can I remove that file? It's a 29Mb file sitting on my repo, so I quite need to remove the file.

I tried to delete the commit in git rebase -i, but apparently because the commit touched a lot of different files, Git complains of conflicts and I aborted to be safe.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一向肩并 2024-11-22 22:32:52

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

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

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

You have already performed a filter-branch operation. After filter-branch, Git keeps refs to the old commits around, in case something goes wrong.

You can find those in .git/refs/original/…. Either delete that directory and all files within, or use the -f flag to force Git to delete the old references.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
吃兔兔 2024-11-22 22:32:52

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

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

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

Use this command to remove original backup:

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

Here is gist I used to filter-branch my git repo: https://gist.github.com/k06a/25a0214c98bc19fd6817

手心的温暖 2024-11-22 22:32:52

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

I had the same problem and the answer above didn't fix it. There was no .git/refs/original/ directory left. The solution for me was to delete the .git/packed-refs file.

假装爱人 2024-11-22 22:32:52

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

Add a force to the filter branch command.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文