Gerrit最简工作流:
git clone ... //注意clone with commit-msg hook,否则push可能失败(ERROR: missing Change-Id in commit message footer)
开发修改代码
git status //查看当前状态,是否所有修改都要提交
git commit -a -m "xxx" //提交修改到本地分支(如果不是想提交所有修改,分开使用git add和git commit -m)
git pull -r //更新合并,如果工作在非master下,用git pull origin master -r。如果冲突见FAQ:2
git push origin HEAD:refs/for/master%r=评审员邮箱
FAQ:
1、如果commit后如何修改提交内容? 如果gerrit评审不过或者pipeline失败怎么办?
修改代码
git add 修改代码
git commit --amend //会跳出来修改日志的编辑框,保存即可,todo,是否要加-m。
git pull -r //更新合并,如果工作在非master下,用git pull origin master -r
git push origin HEAD:refs/for/master%r=评审员邮箱
2、git pull -r 合并有冲突怎么办?
先修改代码解决冲突
git add 修改代码
git rebase --continue
git commit --amend //前面有未push的提交才用参数--amend
git push origin HEAD:refs/for/master%r=评审员邮箱
3、git放弃未提交的修改
$ git checkout -- file-name
$ git checkout *.java //比如修改的都是java文件,不必一个个撤销,可以使用
$ git checkout . //撤销所有修改
4、git所有操作都能回退(回到过去和未来)
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit
所以,我们要找回我们第二commit,只需要做如下操作:
$ git reset --hard 98abc5a$ git reset --hard HEAD^ //上一个版本是
HEAD^
,上上一个版本就是HEAD^^
,更多^
比较容易数不过来,所以写成HEAD~100
。注:revert 和reset 都能回退,但revert 会生成新的commit,Gerrit建议使用reset
git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区
5、如何修改历史提交?
git使用amend选项提供了最后一次commit的反悔。但是对于历史提交呢,就必须使用rebase了。
git rebase -i HEAD~3
表示要修改当前版本的倒数第三次状态。
这个命令出来之后,会出来三行东东:
pick:*******
pick:*******
pick:*******
如果你要修改哪个,就把那行的pick改成edit,然后退出。这时通过git log你可以发现,git的最后一次提交已经变成你选的那个了,这时再使用:
git commit --amend //对commit进行修改。
git rebase --continue //修改完了之后,要回来对不对? OK,一切都搞定了。