情况如下:git存储库中有一个文件A.out
,该文件随着时间的推移而增长,现在变得太大而无法推送到github。我只是在变大之后才意识到后面的几次提交,所以这就是仓库的样子:
A.out
超过100mb A.out
A.out
确实超过了100mb A.out
A.out
不超过100mb COMMIT2是我推送到github的最后一个提交,现在我无法在COMMIT5之后推送。
我如何从提交3和4中删除
A.out
,同时在本地将其保持为最新的> 100mb版本(并且从git中取消跟踪)?
编辑:该问题源自github上的大文件问题,这种特定情况可能可以按照How to import git repositories with large files?(由@phd指出)中的说明进行处理。但是,上述问题当然与所涉及的文件大小无关。在我的特定情况下,git版本太旧,当前无法支持git-lfs,但我不想等到服务器版本更新后。
答案 0 :(得分:2)
git rebase -i HEAD〜4 //为最近的4次提交重新设置git历史记录
它将显示这4个提交的列表。如果要更改远程历史记录(不推荐),则可以选择编辑commit3甚至commit2
在重定commit3的同时,只需将A.out添加到.gitignore。 添加它以提交并继续变基。
如果您以前没有使用过git rebase,建议您先熟悉它
答案 1 :(得分:2)
我假设您当前所在的分支的名称为“ master”
git checkout -b new-branch COMMIT2
git rm a.out
。提交这些更改git checkout master
git rebase new-branch -i
这将导致一些重新配置冲突,因为您要重新建立(从master)的提交包含a.out,而您重新建立基础的分支(新分支)已经使a.out成为未跟踪的文件
在每次提到a.out的冲突中,先运行git rm a.out
,然后运行git rebase --continue
进行重新定位
此过程结束时,您可以安全地使用git branch -d new-branch
删除新分支,并从git repo外部复制a.out。