提交本地修改被拒---被拒原文如下:
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
网友评论