如何删除两个Git提交之前的大文件?

3
基本上我想在我的本地 repo 中回滚两个提交。尚未推送到远程。
所以在我的 GIT repo 中,我不小心在一个提交(A)中添加了一个巨大的 zip 文件。我意识到这一点后,使用 finder 删除了该 zip 文件并进行了另一个提交(B)。
但现在我意识到,如果我将其推送到远程,它将包括整个 zip 文件...
并且为了使事情更加复杂,我还对那个第一个提交(A)中的几个文件进行了许多重要更改,我不想失去这些更改。
在推送到远程之前,如何从历史记录中删除那个 zip 文件?我可以回到这两个提交之前的文件状态,而不会失去对其他几个文件所做的所有更改吗?
2个回答

6
最简单的修复方法是使用 git reset <commit> 命令。在您的情况下,由于您想回滚两个提交,您可以执行:git reset HEAD~2。从 git help reset 中得知:
git reset [<mode>] [<commit>]

--mixed 重置索引但不重置工作树(即保留更改的文件但不标记为提交),并报告未更新的内容。这是默认操作。

之后,您的存储库中的文件将不会被更改,但是最近的两个提交将不再存在。然后,您可以像通常一样选择要提交的文件。

救命稻草!像魔法一样有效! - undefined

0

链接: 如何移动你的HEAD/撤销更改

阅读上述链接以获取完整详情。

你可以使用:


从上面的帖子中可以看出,以下是重置你的HEAD的流程。

enter image description here


其他选择:

如何从代码仓库中删除大文件

你可以使用 git filter-branch 或 BFG。 https://rtyley.github.io/bfg-repo-cleaner/

BFG Repo-Cleaner

是 git-filter-branch 的另一种选择。

BFG 是一种比 git-filter-branch 更简单、更快速的方法,用于清理 Git 代码仓库历史中的错误数据

* 删除超大文件*
* 删除密码、凭证和其他私密信息

示例(来自官方网站)

在所有这些示例中,bfg 是 java -jar bfg.jar 的别名。

# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git

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