【新手小白版】Gerrit使用教程
本文记录了Gerrit使用的一些常用命令及操作,基本可以覆盖日常工作需要。
另外之前也写过一些关于git使用的文章,感兴趣可以参考:
Gerrit多仓库对应多邮箱配置办法
git提交代码时报错nothing to commit,commitId错乱解决办法
git 打patch协作合并提交代码,解决冲突
git commit后使用repo upload出现no branches ready for upload
gerrit提交代码有冲突或其他原因导致的cannot merge以及提交代码流程
整理这篇博客的时候才发现原来已经写过那么多了,我也太棒了吧
好了言归正传,以下是正文内容
首先我们要知道什么是Gerrit
Gerrit是一种代码管理工具,是比gitlab更强大更规范的存在。它的功能包括不限于提交代码,合并代码,在网页修改提交的代码,解决冲突,筛选功能等。
我们如何使用Gerrit
第一步
首先我们需要知道公司gerrit的地址,在网站打开;
然后我们要知道自己的账号,密码,点击Gerrit网站右上角的Sign In登录进去。
第二步
配置SSH KEY,这一步也很关键很重要,总之我感觉使用Gerrit没有一步不重要的,可以说是错一步,步步错,所以认真点学吧。
1.新建一个workspace目录,确保这个目录是有权限的(mac, linux用户)
2.在目录下右键,打开你的git bash命令行工具,没有的安装一个,后面会经常用
3.git配置个人信息:
//不配置全局也可以,看个人选择,不想配置全局就把“--global”去掉,如果发现配置失败,就执行git init再配置
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
4.生成ssh key,这步会直接影响到拉代码
ssh-keygen -t rsa -C "你的邮箱地址"
//按回车键确认保存路径(默认路径为 ~/.ssh/id_rsa),如果不需要更改路径,直接按回车键即可。
//输入密码和确认密码(如果不需要密码,直接按回车键跳过)
//执行上述命令后,会在指定路径下生成两个文件:id_rsa(私钥)和 id_rsa.pub(公钥)。
5.查看和复制公钥
//查看公钥
cat ~/.ssh/id_rsa.pub
把输入上述命令之后打印出来的公钥复制下来,从第一个字符复制到最后一个字符,不要多复制也不要少复制
6.添加公钥
在已登录gerrit的情况下,点击gerrit网站上右上角你的姓名,点击settings,进入gerrit的设置(Settings),找到添加ssh key 的地方
点击右上角姓名-选择settings-左侧"ssh keys"-把刚刚复制的公钥粘贴到"new ssh key"右侧的输入框里,点击"ADD NEW SSHKEY",这样就添加成功了,一般你会收到邮件通知你添加ssh key成功
如果添加失败,再重复前面三个步骤,一般是个人信息配置失败或者复制错了。
第三步
如果前面的都做成功了,到这里就可以拉代码了
首先你需要在gerrit找到你的代码仓库,不知道代码仓库的问下你的同事,或者你可以点击顶部CHANGES-MERGED-点击任意一条你同事提交的REPO列的字段(这就是你的仓库了),这时候你会进入到代码仓库界面,在这里可以复制拉代码的命令,一般选择http列或者ssh列,我一般用ssh拉代码,选择第一行有commit-msg hook备注的命令,点击复制按钮,把复制的命令粘贴到你前面打开的git bash命令行里,然后按回车,这样就开始拉代码了
等到代码拉完,你可以选择切换分支:
git branch -r
git checkout 你想要的分支
git branch --set-upstream-to=origin/你想要的分支 你想要的分支
git pull
第四步
提交代码,每个公司的commit-msg规范不一样,最简单的做法就是看你别的同事已合入的提交记录是咋写的,如果commit-msg不符合规范,会导致无法提交代码。
提交代码命令:
//查看你本地修改状态
git status
git add . //添加所有修改的文件
//git add 文件完整路径 //可以从第一行命令打印出来的里直接复制,这行和上面那行根据情况选择一个
git commit . //二次确认需要提交的所有修改的文件,这里输入完会进入commit-msg表单//填commit-msg,注意这里需要按规范填写,linux命令就不用我教了吧,英文输入法下按a会进入编辑状态,输入完之后按esc,然后输入冒号,再输入wq,就是保存后退出//提交代码
git push origin HEAD:refs/for/你要提交的分支
提交代码时你可能会遇到的一些问题
第一种:fail to push some refs to “xxxx”
一般有两个原因
- 命令输错/分支名打错,是这个原因的去上面再看一眼提交命令
- git链错误了,这个概率也挺大的,你需要执行以下命令
比如当前在master分支要提交内容,那么你需要在commit之后,执行:
git stash //如果直接输入下面那行有报错提示You have unstaged changes.的话,没有的话就不用输入
git pull --rebase origin 分支名
git rebase --continue
git stash pop //和第一句配合,第一句没输这句就不用输,这两句的作用主要是把本地未commit的修改压入缓冲区,以及再从缓冲区扔到本地,防止操作的时候影响到本地的内容
git push origin HEAD:refs/for/你要提交的分支
第五步
在上述步骤都成功之后,你现在需要合入代码,也就是需要把你本地修改的内容发布到代码仓库里,不然别人是看不到你的修改的。
点击左上角CHANGES-OPEN,并且点击你的那条提交,点击左侧Reviewers右边的编辑按钮,此时会弹出框要求你添加review代码的审查人,输入有权限的审核者名字或者邮箱,搜索框会显示搜索内容,选择他,下面的CC可以加也可以不加,这个是通知你想通知的人,他可以不参加审核,选好之后点击右下角SEND按钮,gerrit就会自己发邮件通知reviewers了,你也可以把你的提交的网址复制给你的reviewers让他们审核。
一般代码合入条件是verified+1和code review+2同时满足,此时右上角会出现submit按钮高亮,也有可能出现按钮但是不高亮的情况,此时点击rebase按钮,选择将你的change追加到最新提交上,如果还是无法合入,那么接着往下看。
冲突的解决办法
第一种情况:提交链错乱
有时如果提交代码的顺序与合入代码的顺序不一致,即使没有改动同一份文件,也可能会出现conflict提示,也可能提示无法合入,也就是说可能同时有多个人有不同的提交,reviewer可能先合入了比你后提交的代码。这是由于git链不一致了,此时点击需要合入的那份代码的右上角的“REBASE”,然后输入你想要追加到后面的那条提交的changeId(一般是当前merge进去的最新一笔提交的changeId),点击确认即可。
第二种情况:提交链错乱的同时修改了同一份代码文件
这种情况比第一种复杂一点,简单的通过网页一般很难解决,不过遇到这种情况,先试一下上面第一种情况的办法,如果还是无法解决,就在本地执行git pull拉一下最新代码,在本地解决下冲突,一般有冲突的地方git会帮你标注出来,提交代码的时候记得删掉注释,本地解决完没问题之后,如果你冲突的是你最新提交的那笔,就执行:
git add 你要提交的代码文件的完整路径
git commit --amend //追加到你最新提交的代码上
//此时会跳转到commit-msg表单,如果你没有要修改的内容的话,就shift+zz退出编辑
git push origin HEAD:refs/for/你要提交的分支
如果你冲突的并不是最新那笔,那你看本文最后一节,包你精通gerrit
第三种情况:前面两种都解决不了
那你只能点击gerrit网页你的提交的右上角abandon按钮,丢弃这条提交,不会合到主分支里,也不会对你本地有影响,abandon之后,回到你的本地,让我们来做一些处理:
git log //查看提交历史,执行这句会打印所有的提交记录,复制一下你刚刚abandon的提交前一条的commit-id,注意是commit-id,就是每条提交的第一行,和change-id是两个东西
git reset --soft 复制的commit-id //这里的soft代表保留废弃的修改内容到本地,但是回滚到你的提交之前,可以使用hard,但是不推荐,因为容易丢git pull //拉最新的代码
//这时候你可以解决冲突了,解决完了之后做add, commit, push操作再重复一遍第五步
追加提交相关的操作
第一种:最新的commit提交遗漏了一些文件或者修改
如果你已经push到远端,但是本地还有一些文件没有提交,但是此时远端代码还没有合入,你可以执行以下命令:
git statusgit add 你想追加的文件1 你想追加的文件2git commit --amend //这句的意思是追加到你本地最后一笔提交上git push origin HEAD:refs/for/xxxxxxxxxxx
第二种:你本地有多个提交,你需要在中间的提交追加东西或者去除东西
首先我们看下本地提交链:
//假设它长这样
commit 33333333333333
Author: you <you@xxx.com>
Date: Wed Oct 22 10:12:26 2025 +0800your-commit-msgxxxxxxxxxxxxxxChange-Id: change14235236161commit 2222222222222222
Author: you <you@xxx.com>
Date: Wed Oct 22 09:11:02 2025 +0800your-commit-msgxxxxxxxxxxxxxxChange-Id: change14r435432656245commit 11111111111111
Author: you <you@xxx.com>
Date: Tue Oct 21 10:54:38 2025 +0800your-commit-msgxxxxxxxxxxxxxxChange-Id: change14436567546897683
比如你想追加到commit-id为2222222222222222的这笔上,这也很简单,不要怕,接着往下看:
//你先在本地做好你准备提交的修改,然后再做以下处理
git rebase -i 2222222222222222
此时会自动打开编辑器,找到你想要的那个,将最前面的“pick”改为“edit”
然后编辑你需要追加的文件,改好之后执行
git add .(这里的点点代表追加所有修改,如果你不想追加所有修改,那么就把点换成完整的文件路径,可以填多个)
git commit --amend
git rebase --continue
git push origin HEAD:refs/for/xxxxxxxxxxx
OK,现在说谢谢我吧