文章目录
背景描述
最近刚接触gerrit,记录使用过程中一些个人的踩坑经验(已经使用过git,还不了解gerrit是什么的小伙伴戳这里:git和gerrit的区别)
踩坑①:missing Change-Id in commit message footer
参考gerrit push配置,第一次git push review报错:
提示“ERROR: commit xxxx: missing Change-Id in message footer”
执行git log查看提交记录:
可以看到,最新的提交确实缺少了Change-Id,参考gerrit场景教程这篇博客解决(如果缺少Change-Id的不是最新的提交,也请参考这篇博客):
运行git push review报错提示中的两段代码(第一张图两个红框下的两段代码),直接在命令行选中相关代码,按“Shift+Insert”,再回车执行即可:
再运行git log,可以看到最新的提交已经生成了Change-Id~
PS:有可能在执行第一个红框的语句时报错:
subsystem request failed on channel 0
scp: Connection closed
参考subsystem request failed on channel 0这篇博客解决,只要将其中的
“scp -p -P”
替换为
“scp -O -P”
再执行就不会报错啦~
踩坑②:cherryPick后push报错
问题描述及解决方案可参考gerrit合并分支Cherry-Pick后push报错这篇博客。
笔者的个人可能不太专业的理解:gerrit会将ChangeId相同的提交合并到同一远程更改,若这一远程更改已处于abandon状态,则无法接收新的提交,也就会报错。所以,此时有两种解决方案:
- 参考上述博客,git commit --amend删除其中的Change-Id并重新生成新的Change-Id,即作为一条新的更改提交;
- 在gerrit中点击restore将已经abandon的更改恢复,此时本地可以正常提交到这条更改
☆☆☆git/gerrit提交出问题的杀手锏☆☆☆
因为笔者不够熟悉git使用提交出问题(多半是本地有些乱七八糟的记录)有一个“简单通用”的杀手锏(屡试不爽★▼★):
0 如果远程分支有新的更改,请先git stash暂存本地更改,接着git pull拉取远程最新代码,然后git stash pop还原本地更改(如有冲突请处理),总之必须确保本地包含了远程最新代码(因为之后要用这份代码覆盖重新从远程拉取的代码)
①将要提交的项目文件夹下除.git文件夹和自动安装/生成(如node_modules文件夹)之外的项目核心文件备份到另一个新建文件夹;
②删除要提交的项目文件夹下的全部文件;
③在要提交的项目文件夹中重新拉取远程代码;
④用新建文件夹里备份的文件覆盖要提交的项目文件夹中对应的文件(Emm…还是再多说一句,要注意此时远程是否又有了最新更改);
⑤干干净净,不再有乱七八糟的提交问题啦!
参考网址
[1] git和gerrit的区别
[2] gerrit push配置
[2] gerrit场景教程
[3] gerrit提交缺失Change-Id
[4] gerrit合并分支Cherry-Pick后push报错
[5] 理解gerrit的Change-Id
[6] subsystem request failed on channel 0