网上找的专业分析
https://zhangmengpl.gitbooks.io/gitlab-guide/content/gitlabvsgerrit.html
使用gerrit可以先clone master分支,然后在本地checkout一份自己做开发的分支my_branch,如果在阿里云和ucloud上clone master分支需要加上host全称
git clone ssh://pengzhang@gerrit.mobvoi.com:29418/vertical_search/mobvoi && scp -p -P 29418 pengzhang@gerrit.mobvoi.com:hooks/commit-msg mobvoi/.git/hooks/
然后在my_branch上做修改测试完成之后提交push到master
提交时注意
因为gerrit是根据change-id来判断code review的,所以提交之前要看好当前的change-id,如果是你想提交到的change-id,直接
1.git add -u
2.git commit --amend
3.git push origin HEAD:refs/for/master
备注:第三部可能遇到push失败情况,是因为当前的change id已经close了,需要重新生成change id push
git reflog
git reset {commit id}
git add
git commit -m “{comment}”
git push origin HEAD:refs/for/master
如果不是想要的(一般新建的分支都是需要重新生成change-id)就新起一个change-id ,
1.git add -u
2.git commit -m “{comments}” #这步会生成一个新的change-id
3.git log #查看是否有新生成change-id
4.git push origin HEAD:refs/for/master
在开发过程中可能需要临时提交并在其他机器上下载下来编译测试的情况
屏幕右上角有个download,第一个就是把当前的code review修改下载下来,无论在哪个分支都可以。
1、gerrit也可以不经过code review直接push,这个需要有最高权限才可以,这种情况一般在一个新项目需要不断快速迭代时使用。
git push origin HEAD:refs/for/master%submit
文章链接
2、撤销几乎任何操作
3、git查看未push的文件,git log --name-status
4、每个功能的修改都checkout 一个新分支,这样在这一个分支上可以用--amend一直保证change id不变,checkout到其他分支创建新的change id也不会修改这个change id
5、如果想对其他的change id做修改,需要先checkout出来那个change id然后做修改(用第三个持续调试),再用--amend继续commit并push
6、merge时出现conflict(冲突)时需要用rebase解决冲突,
git rebase origin/master //不能用本地的master,自己尝试使用本地的master时,在最后rebase continue时就会出错
[fix conflict]
git rebase continue