gerrit常见错误与处理

gerrit:
gerrit :重复push
场景描述:如果push到gerrit后,gerrit未审批,然后再次push,此时未审批的提交会默认在提交一次,而我们可以针对性的选择push即可避免重复push

gerrit :Merge Conflict
出现的原因:a和b都修改了类1,a代码push到gerrit,gerrit停留在审批状态,然后你修改了同一个文件,也push了相同的文件,此时你本地发现不了。
现在做法:审批不通过,然后Git pull解决冲突后重新push到gerrit。

gerrit push失败:
如果出现push被拒绝,错误信息如: Missing tree 7cb7d11cbf6b23f2c27f15ec17c58818d4a20522
执行 在mybranch上rebase 在test分支上:git commit --amend

问题:remote: commit fe0f5b0: warning: subject >50 characters; use shorter first paragraph
解决:提交的信息太多,不应该大于50个长度

问题:change http://gerrit.xiaohoucode.com/c/coding-cloud-platform/+/623 closed)
原因:623这个commit已经提交了。
解决:git commit --amend 然后重新push,然后发现有时候好用,有时候不好用

! refs/heads/feature/lesson_report:refs/for/feature/lesson_report [remote rejected] (change http://gerrit.xiaohoucode.com/c/coding-cloud-platform/+/1673 closed)

可能原因:rebase导致

解决 Git log 找到本次提交的上次的commitId

gerrit常见错误与处理_第1张图片

 

Git reset --soft 13fb12f8cda1f039e031b785575872197407e22c

然后提交即可。


比方说,你的代码已经提交到git库,leader审核的时候发现有个Java文件代码有点问题,于是让你修改,通常有2种方法:

代码review发现代码有个小bug,需修复。
方法1:leader 将你提交的所有代码 abandon掉,然后你回去 通过git reset …将代码回退到你代码提交之前的版本,然后你修改出问题的Java文件,然后 git add xx.java xxx.java -s -m “Porject : 1.修改bug…” 
然后重新push到gerrit。
方法2: 
leader不abandon代码,你回去之后,修改出问题的Java文件,修改好之后,git add 该出问题.java 
然后 git commit –amend –no-edit, 
最后 git push origin HEAD:refs/for/branches。
当我们想要对上一次的提交进行修改时,我们可以使用git commit –amend命令。
git commit –amend既可以对上次提交的内容进行修改,也可以修改提交说明。
借鉴:https://blog.csdn.net/liuskyter/article/details/100517652
https://www.jianshu.com/p/a8a2ac58f37d

error: failed to push some refs to 'ssh://[email protected]:29418/coding-cloud-platform'
To ssh://gerrit.xiaohoucode.com:29418/coding-cloud-platform
! refs/heads/feature/lesson_report:refs/for/feature/lesson_report [remote rejected] (no new changes)
解决:
gerrit上查看提交记录,发现commit已经成功push上去了。所以导致这个报错的原因是gerrit上已经包含了具有同样commitid的提交了,如果你确认这个具有相同commitid的提交不是同一笔(一般不会出现),可以通过git commit --amend打开commit mesage编辑状态,然后不需要修改任何东西,然后输入:wq保存退出,这个时候commitid就发生了变化了,这时再提交应该就没有问题了
借鉴:https://www.klavor.com/dev/tutorial/2019/08/22/00004335.html

 

问题:

15:10:39.586: [coding-cloud-platform] git -c credential.helper= -c core.quotepath=false -c log.showSignature=false push --progress --porcelain origin refs/heads/feature/lesson_report:refs/for/feature/lesson_report
Enumerating objects: 136, done.
Delta compression using up to 8 threads.
Total 90 (delta 38), reused 0 (delta 0)
remote:
remote: Processing changes: refs: 1
remote: Processing changes: refs: 1, done
remote: ERROR: commit 40ccca1: missing Change-Id in message footer
remote:
remote: Hint: to automatically insert a Change-Id, install the hook:
remote: gitdir=$(git rev-parse --git-dir); scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/
remote: and then amend the commit:
remote: git commit --amend --no-edit
remote: Finally, push your changes again
remote:
error: failed to push some refs to 'ssh://[email protected]:29418/coding-cloud-platform'
To ssh://gerrit.xiaohoucode.com:29418/coding-cloud-platform
! refs/heads/feature/lesson_report:refs/for/feature/lesson_report [remote rejected] (commit 40ccca1: missing Change-Id in message footer)

解决:

  执行git commit --amend后重新执行gerrit的push,仍然失败。

Git log:如下图,

gerrit常见错误与处理_第2张图片

 

从上而下,我们用commitid1,commitid2,commitid3表示截图中的三个提交,很明显,第二个提交commitid2没有change_id,这个时候我们可以git reset --soft commitid3来软回退到异常节点的前一个正常的节点,然后重新提交。具体操作如下:

git reset --soft commitid3.

然后重新commit和push。

这次成功推到gerrit了,但是还有问题:只有我一个人用的分支在gerrit中提示 merge conflict。

解决:rebase 本分支,确实提示有冲突,然后解决冲突后,重新push,终于成功,且没有conflict了。

https://blog.csdn.net/zhouyan8603/article/details/92748700

问题:

1 为什么没有changeId,什么场景会导致changeId丢失

不知道

2 重新push的时候为什么会conflict。只有我一个人用的分支在gerrit中提示 merge conflict

丢失changId后,push失败,修改changId中对应修改的文件,reset重新push,出现merge confilct

你可能感兴趣的:(git,Git,gerrit)