Gerrit Change有状态:已提交,合并挂起,如何解决



Gerrit系统只供我们几个人使用。一旦出现变更a,其状态为:"已提交,合并挂起"。"打开"网页中的更改列表。我还注意到这个变更依赖于另一个变更B(状态被放弃)。

  1. 如何在"合并"网页上列出A
  2. 如何让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"状态。我通常会写一条这样的评论,如果投稿人不需要麻烦来重新建基的话。

  1. 放弃Gerrit的推动

终端上:

  1. git日志
  2. git重置HEAD~n

其中n是从步骤2 在终端上生成的提交列表中从顶部开始的提交计数

  1. git添加
  2. git commit-m"您的消息"
  3. 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就可以再次合并我挂起的补丁。

最新更新