问题描述
今天准备上传一个项目到GitLab上,但是试了很多次都上传不上去,报错如下:
第一种:! [rejected] master -> master (fetch first)
第二种:! [rejected] master -> master (non-fast-forward)
第三种:! [remote rejected] master -> master (pre-receive hook declined)
一开始还以为自己用户名和密码错误,试了好多次,网上搜所索也没搜索到明确的结果,不过最后还是找到了解决的办法。
分析
git push
不上去的原因在于所push
的分支权限为protected
,只有项目的管理员或者项目的管理员指派的具有相应权限的人才能进行push
,要进行项目的push
,有如下两种方法:
解决①
- 将所要push的内容所在的分支的protected权限关闭
(1)、进入所在项目的settings
(2)、点击进入Protected branches
,点击unprotected
将master
分支的权限改变,即关闭master
的protected
权限
(3)、通过git pull
先将本地库更新到与远程库一致的版本,但要注意本地库后来做的修改可能被覆盖,最好使用git fetch(不会自动合并)
,查看更新情况再有选择合并,或者先将本地库修改过的文件备份,git pull
后再重新修改
(4)、再运行git push
即可成功。
解决②
- 新建其它分支,将项目
push
到新建的分支上,后期再进行merge
(1)、新建分支
git branch 分支名
(2)、切换分支
git checkout 分支名
(3)、进行项目上传
git add .
git commit -m "提交的信息"
git remote add origin 远程仓库地址 # 也可加上-f强制推送
git push -u origin 分支名
解决③
- 暴力型方案:
git提供了一种强制上传的方式:git push -f
,它会忽略版本不一致等问题,强制
将本地库上传的远程库,但是一定要谨慎使用
,因为-f
会用本地库覆盖
掉远程库
如果远程库上有重要更新,或者有其他同伴做的修改,
也都会被覆盖
,所以一定要在确定无严重后果的前提下使用此操作。