偶尔我会把一个DVD-rip放到一个网站项目中,然后不小心git commit -a -m ...,然后,zap,回购邮件被2.2演出臃肿.下次我做了一些编辑,删除了视频文件,并提交了所有内容,但是历史记录中的压缩文件仍然存储在存储库中.
我知道我可以从那些提交开始分支并将一个分支重新绑定到另一个分支.但是我应该怎么做才能将2个提交合并在一起,以便大文件没有在历史记录中显示并在垃圾收集过程中被清除?
甚至可以从Git存储库中完全删除特定的变更集.我想这样做,因为前一段时间有一个提交添加了一些对源代码管理绝对无用的二进制文件.
我可以理解,如果提交节点具有父节点和特定历史记录这是不可能的,但我想这不会有问题.
答案是否定的问题是"你能否在发生提交之前克隆新的时间副本并再次从那里开始?".
不幸的是,我们不久前意外地检查了一个大的二进制文件,直到今天没有人注意到.现在我想删除该提交并保留剩余的历史记录.我知道改变推进历史的警告,但在这种情况下,我无法避免它.
我一直试图达到这个~1h但却未能得到它.我找到的最好的命令是
git rebase --interactive --preserve-merges $(EVIL_COMMIT)^
Run Code Online (Sandbox Code Playgroud)
并在编辑器中评论出第一次提交是邪恶的.
不幸的是,git rebase在合并时停止并提示手动解决合并冲突.邪恶的提交只添加了我们的软件为测试目的计算的一些示例文件.因此,它们不应该与刚刚丢失的示例文件发生任何冲突.
我在Google和SO搜索上花了很多时间.一些线程涵盖了类似的主题,但是使用的语法在今天的Git版本中不再可用,或者它对我不起作用(我之前仅描述了一种方法,因为它是最简单的方法).