git push 报错Push rejected、 remote unpack failed 、unpacker error、 failed to push some refs to
【先上图】
刚准备把一个新的本地分支提交到远程仓库,猝不及防的报了个错(莫名其妙。。。)
先是在idea上直接push,提示Push rejected,推送失败,idea只会提示个Push rejected,并没有其他的提示信息
然后就只能敲git命令(我在期望它直接成功。。),果然,报错了,如上图
大致看了下,有三个信息:
1.error: remote unpack failed: error Missing blob
2.error: failed to push some refs to
3.! [remote rejected] xxxx (unpacker error)
1.error: remote unpack failed: error Missing blob
第一个报错信息百度了一下,原因在与本地仓库过大,需要使用命令 git gc进行清理
原因在于:Git的底层并没有采用 CVS、SVN 底层所采用的那套增量式文件系统,而是采用一套自行维护的存储文件系统。当文件变动发生提交时,
该文件系统存储的不是文件的差异信息,而是文件快照,即整个文件内容,并保存指向快照的索引。这种做法,提高 Git 分支的使用效率;但也容易
导致代码仓库中内容重复程度过高,从而仓库体积过大。当遇到这种情况时,或者需要将仓库推送到远程主机时,就需要Git中的gc(garbage
collect)功能,也就是垃圾回收功能。
————————————————
版权声明:本文为CSDN博主「lihuanshuai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lihuanshuai/article/details/37345565
我就参照上面文章进行了git gc。如图:
然后我继续执行了命令git push origin xxx(祈祷能成功~~)
结果还是失败,报一样的错误,就像图1
没办法只能看下一个提示信息
2.error: failed to push some refs to
网上报这错的基本上都是提交到github中且没有README.md文件的情况,建议我进行pull操作。
但是我这是pull完之后新迁的本地分支,准备推新分支到远程仓库,不存在远程仓库中代码版本与本地不一致的情况。
这个信息对我没啥用,看下一条吧。。。
3. [remote rejected] xxxx (unpacker error)
一:权限问题这个问题查资料发现大部分都是权限问题,需要所有者给你开权限,但我权限是有的(应该)
二:还有就是 疑似某个 git 对象和远程仓库不一致了,远程仓库拒绝了推送。造成这个问题在于–thin 选项,这个选项是 git push 默认的选项,它会向远程仓库推送时进行优化,以将所发送的包降低到最小,它会把发送时忽略本地仓库和远端仓库中共有的部分,只发送不同的部分。
所以推送时可以 去掉这个参数进行推送:–no-thin
参考git常见问题 的git push 案例一
于是我就继续敲命令进行尝试:
git push --no-thin origin xxx
这次终于没问题,成功推送的远程仓库!!!
总结:
遇到上述问题首先
1.查看自己是否有推送权限,没有先找所有者开通权限(不然白忙活)
2.是否已经进行git pull操作,没有先pull
3.git gc 先清一清垃圾再说,说不定就没问题了(笑~)
4.–no-thin,提交时去掉优化,直接提交