git核武器解决超大文件修改提交被拒

提交本地修改被拒---被拒原文如下:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v origin dev:dev 
Pushing to https://git.oschina.net/***/jsb_iOS.git
POST git-receive-pack (chunked)
remote: Powered by Gitee.com        
remote: warning: Large files detected.        
remote: error: File Pods/AMap3DMap-NO-IDFA/MAMapKit.framework/MAMapKit is 137.41 MB; this exceeds file size limit of 100.0 MB        
remote: error: hook declined to update refs/heads/dev        
To https://git.oschina.net/***/jsb_iOS.git
 ! [remote rejected] dev -> dev (hook declined)
error: failed to push some refs to 'https://git.oschina.net/***/jsb_iOS.git'
Completed with errors, see above

被拒原因分析:本地提交的修改中包含超过100M大小的文件,导致git拒绝提交!

根据git官网给出的核武器(filter-branch)来解决此问题!同时借鉴前车之鉴

  • --tree-filter 选项在检出项目的每一个提交后运行指定的命令然后重新提交结果

  • --all 为了让 filter-branch 在所有分支上运行,可以给命令传递 --all 选项

  • --prune-empty 表示如果修改后的提交为空则扔掉不要

  • -f 是忽略备份。不加这个选项第二次运行这个命令时会出错,意思是 git 上次做了备份,现在再要运行的话得处理掉上次的备份。

  • HEAD~3..HEAD 从当前提交之前的第3次提交 到当前提交 都执行此命令

git filter-branch -f  --prune-empty --tree-filter 'rm -f Pods/AMap3DMap-NO-IDFA' HEAD~40..HEAD
Rewrite bb6be8af9994cca8cceb943cf19d1b065a56319c (38/70) (12 seconds passed, remaining 10 predicted)    rm: Pods/AMap3DMap-NO-IDFA: is a directory
tree filter failed: rm -f Pods/AMap3DMap-NO-IDFA

-f十分重要,因为只能删除文件,而不能删除文件夹; 如果有多个文件需要删除就需要 添加上-f的命令,以免第二次运行这个命令出错!

建议:检出一个新分支,在新分支上做如下操作;达到自己想要的效果后,再回到主分支上修改!

//从指定的commit中删除误操作文件的记录
git filter-branch --tree-filter 'git rm -f --ignore-unmatch {{文件名}}' [commit1..commit2]

//从当前分支的前30次提交开始遍历,删除误操作文件的引用
git filter-branch --tree-filter 'git rm -f {{文件名}}' HEAD~30..HEAD

解决办法:

打开终端,
cd到当前项目目录下,
git filter-branch -f --prune-empty --tree-filter 'rm -f Pods/AMap3DMap-NO-IDFA/MAMapKit.framework/MAMapKit' HEAD~40..HEAD

执行结果如下:


执行结果.jpeg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容