git/github:从历史记录(但不是从头部)中删除一些大型二进制文件

git/github:从历史记录(但不是从头部)中删除一些大型二进制文件,git,github,Git,Github,我正在使用git/github进行一个项目。它主要承载代码源,但也包含一些大型图像。 我将不得不不时更新大型图像,但我不想保留它的历史记录,我只想在我的git/github中使用最新版本 有没有办法对git说:“保存这个文件,但不要保存它的任何历史记录”? 如果没有,如何在提交/推送之后立即手动安全地删除文件的历史记录 谢谢你的帮助 我看到两种可能的解决办法。 第一种解决方案(“脏”) 使用一个分支进行开发,该分支始终具有最后一次提交,以添加大文件 除此之外的所有提交都不应添加任何大文件 要更改

我正在使用git/github进行一个项目。它主要承载代码源,但也包含一些大型图像。 我将不得不不时更新大型图像,但我不想保留它的历史记录,我只想在我的git/github中使用最新版本

有没有办法对git说:“保存这个文件,但不要保存它的任何历史记录”? 如果没有,如何在提交/推送之后立即手动安全地删除文件的历史记录

谢谢你的帮助

我看到两种可能的解决办法。 第一种解决方案(“脏”) 使用一个分支进行开发,该分支始终具有最后一次提交,以添加大文件 除此之外的所有提交都不应添加任何大文件
要更改源文件您需要在大文件的基础上提交,然后使用
git-rebase
(假设您在master分支中工作的示例:
git checkout-b src HEAD~1&&git cherry pick master&&git-rebase-src master&&git-branch-d src
)在所有提交的基础上弹出提交的命令。
要更新大文件集,您需要将该文件集设置为最后一个文件集,并对其进行修改,而不是创建新文件。
在这种情况下,您将无法使用仅进行快进refs更新的默认
git push
行为,并且必须进行强制更新,如
git push+master:master
(注意+符号)

第二种解决方案(“清洁”) UPD:有类似的问题,也有类似的答案。
我注意到在我写了我的答案之后

大文件创建单独的存储库,并在主存储库中将其用作。
要修改源文件,只需在主repo中定期提交即可。

当您需要更新子模块repo中的大文件集时,您必须修改其中的唯一提交,而不是进行新的提交。

这并不完全是您想要的,但仍然可能有帮助: