嗯,所以我的分支中有一个项目包含一个非常大的文件,github在推送时拒绝了:
remote: error: File burorevise/bootstrap/img/imgs.psd is 139.42 MB; this exceeds GitHub's file size limit of 100.00 MB
To git@github.com:vomc/privat.git
! [remote rejected] branch0.3 -> branch0.3 (pre-receive hook declined)
我已经看过几个关于这个问题的帖子,他们都建议重新定位或重置为HEAD
所有我尝试过的帖子,包括在git中强制删除然后为整个git clean -f -d <path>
执行操作目录也是如此。
现在当我做git状态时,我收到一条消息: 在分支机构0.3上 你的分支在6次提交之前领先于'origin / branch0.3'。 (使用“git push”发布您的本地提交)
我没有看到我的项目和导致此错误的大文件的痕迹,因为我已将它们全部删除。但当然ahead by 6 commits
表示它仍然在某个地方。所以现在当我做git push
时,它仍然试图推动这个从硬盘驱动器中消失的文件。
有快速解决方法吗?或者最好只是建立一个新的分支并在整个情况下进行核武器?
感谢!!!
答案 0 :(得分:0)
在你做任何事情之前我告诉你,在HEAD
开始一个新的分支,以防万一。如果出现问题,它将允许您放弃所有更改。
处理此问题的经典方法是从引入文件的提交开始,提交交互式rebase 。所以说你在相关的分支上(这将是所有分支,其中存在不幸的提交链!)。
所以说改变是在6次提交之前完成的(在提交HEAD~5
)。我们必须根据先前的提交(远程分支的HEAD
)进行更改,因此我们执行:
git rebase -i HEAD~6
现在你必须edit
引入相关文件的提交。你就像修改提交一样:
git rm <file>
git commit --amend
git rebase --continue
这应该从您的历史记录中删除该文件。如果有一个引入该文件的提交,您也可以删除它而不是编辑它(通过删除提交本身的行)。
如果遇到合并问题(文件已更改,并且稍后提交了更改),请像处理引入文件的提交(上面的序列)一样处理它。
我不确定,但你可能必须运行git gc
来摆脱旧对象(push
希望在打包时为你做这件事,我想)。
编辑:请注意上面的方法更改了分支的历史记录,您不应该尝试使用已经被某些远程存储库推送或提取的提交(例如Github,或者你的同事的本地回购)。这将使你的合作者充满激情地恨你,因为他们无法贡献自己的工作,必须强行覆盖他们当地的分支机构,否则你将无法推动你的改变。