事情的起因是Unity开发过程中,经过了几个版本的提交后发现没有加.gitignore文件,导致提交记录中有对Library/的修改,并且由于Github对大文件的限制而推送失败。
一个能尽可能保留提交记录的解决方案是使用git filter-repo,这个工具可以从Git的整个历史中移除特定文件。不同于git rm --cache,它直接修改历史记录,因此以前的版本也不会包含这些文件。
git filter-repo --path 'Certain path' --invert-paths
--invert-path表示删除指定路径的文件
要注意的是历史记录修改后要强制推送到远程仓库(因为这是一个会改变历史的危险操作),并且其他的fork也要重新克隆仓库。