Gerrit系统只供我们几个人使用。一旦出现变更a,其状态为:"已提交,合并挂起"。"打开"网页中的更改列表。我还注意到这个变更依赖于另一个变更B(状态被放弃)。
- 如何在"合并"网页上列出A
- 如何让B消失,这样A就不再依赖B了
如果更改A依赖于B,则在合并B之前无法合并A。由于您已放弃B,Gerrit不会自动合并A。
您需要做的是修改A(可能使用git rebase
),使其不再依赖于B,并将更改重新提交给Gerrit。
仅供参考。当用户在同一页面上按两次提交(她双击了提交按钮)时,我遇到了同样的问题"提交,合并挂起"。它发生在Gerrit 2.11中。
日志中的错误看起来像
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5173-2-1' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
提交之前只有1次提交(代码更改)。但双击后有2个提交。第二个是新的提交消息和"已提交,合并挂起"状态。
当我删除了关于第二次提交的所有信息时:
$ ssh -p 29418 admin@machine gerrit gsql
gerrit> delete from `patch_set_approvals` where change_id=5173 and patch_set_id=2;
gerrit> delete from `patch_set_ancestors` where change_id=5173 and patch_set_id=2;
gerrit> delete from `patch_sets` where change_id=5173 and patch_set_id=2;
它被用户Gerrit Code Review标记为已集成。
Greg所说的是正确的,自动合并是不可能的。通过使用Gerrit的"cherry-pick"选项(本质上是手动合并),可以只合并A。遗憾的是,这不会删除Gerrit的"Merge Pending"状态。我通常会写一条这样的评论,如果投稿人不需要麻烦来重新建基的话。
- 放弃Gerrit的推动
终端上:
- git日志
- git重置HEAD~n
其中n是从步骤2 在终端上生成的提交列表中从顶部开始的提交计数
- git添加
- git commit-m"您的消息"
- git-push
现在合并你对Gerrit的承诺。
Guy。如果你提交了一个标签,你可能会遇到一个bug。这个错误已经在Gerrit V2.7中修复。
Bug参考:https://groups.google.com/forum/#!主题/回购讨论/tLVLibfzroc
我遇到了同样的问题"Submitted,Merge Pending",没有任何依赖或冲突。快速解决方法是浏览所有打开的项目,看看是否有其他处于"已提交,合并挂起"状态的提交。如果是的话,就把它们全部抛弃。
然后git commit--modify-m"your original comments"和git push再次出现,这一次您可以合并您的修复程序。
我遇到这个问题是因为我向分支名称推送了一个标签
git tag x.y.z HEAD
git push -f origin x.y.z:master
所以最好推一个分支,
git tag x.y.z HEAD
git push -f origin HEAD:master
这样gerrit就可以再次合并我挂起的补丁。