从提交记录中移除已提交的文件

4
我不小心提交了一些非常大的PDF文件,远超过了GitHub的大小限制,因此当我稍后推送时出现了错误,无法推送。现在,我想从提交中删除这些文件,但同时又不想在本地将它们丢失,这样我就可以稍后添加 .pdf 到 .gitignore,然后提交并推送我的其他更改。有谁知道我该如何做到这一点吗?
我不想撤消任何更改,也不想冒险这样做。

你看过如何撤销最后一次提交?吗? - galath
4
使用命令 git reset --soft HEAD~1 来撤销上一次提交。 - galath
2个回答

9
你可以尝试这样做:
git rm *.pdf
git commit --amend

我认为这应该可以在本地修复你的提交,然后你就可以推送它了。

编辑

复制你的PDF到其他位置,因为rm命令会将它们从git目录中删除。


git rm .pdf zsh:没有找到匹配项:.pdf你知道为什么会出现这个问题吗? - bjornasm
PDF文件还在git目录中吗? - nalyd88
我不确定为什么它不起作用。如果它们当前在最新的git版本和分支上,git rm *.pdf应该可以工作(即使从目录中删除了PDF,在我的系统上已经验证)。你可能已经删除它们/重置提交了吗? - nalyd88

9

首先备份这些文件

打开终端cd到你的git目录中并执行以下操作:

git log

你会看到以下这样的东西:

enter image description here

然后,在添加这些大型pdf文件之前,复制提交哈希值,并运行此命令。
git reset --soft <good commit hash>

现在您可以推送本地更改。


但是(无法访问的)blob仍然存在,对吗?如果OP运行“git gc --aggressive”,是否也需要这样做,或者在执行git push时会自动处理? - Aravind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接