目录
git push 失败报错! [remote rejected] master -> master (prohibited by Gerrit)
git push 失败报错! [remote rejected] master -> master (prohibited by Gerrit)
解决方法:
$git push origin HEAD:refs/for/master
master可以替换为你分支的名字
原理:
这是在Gerrit上的使用限制,和git本身无关。
refs 的含义:Branches, remote-tracking branches, and tags等等都是对commite的引用(reference),引用都以 “refs/……”表示. 比如remote branch: origin/git_int(=refs/remotes/origin/git_int), local tag: v2.0(=refs/tags/v2.0), local branch: git_int(=refs/heads/git_int)…
规则上 refs/for/master 需要经过code review之后才可以提交;refs/heads/master 不需要code review。
如果项目配置了需要code review的话就会遇到这种报错(一般项目默认配置成需要)
如果直接使用
$git push
其实就会自动扩展为
$git push origin HEAD:refs/heads/master
Gerrit会按照不执行code review的方式提交,从而导致和远程代码库冲突,此时只需要按照上面解决方法里的方式传参就可以正常使用啦~
解决办法:
复制报错信息下面的三行命令,执行即可;其中有两条在一起,以分号隔开的
$gitdir=$(git rev-parse --git-dir);
$scp -p -P 端口号 xxx地址@xxxx:hooks/commit-msg ${gitdir}/hooks/
$git commit --amend --no-edit
上面指令提供参考,第二条需要替换成自己的端口号和地址url
可以直接从报错信息下方复制后执行
原理:
本地hooks/commit-msg文件内容缺失,需要从远端服务器重新下载,下载后重新执行提交操作
只有第一次拉取远程文件的时候会遇到这个问题,之后就可以正常使用了