如何解决 gerrit 批准的审查中的合并冲突?

How to solve merge conflict in a approved review in gerrit?

我在 gerrit 中进行了更改,该更改经过代码审查并在 7 次修订后获得批准。但是,现在它无法合并,并且由于合并冲突,尝试在 gerrit 网站中重新设置基线不起作用。我如何解决此合并冲突并合并相同的已批准更改而不创建新更改。 (克隆存储库的完整步骤将不胜感激。)

1) 克隆 Gerrit 存储库

git clone https://USER@GERRIT-SERVER/a/REPO-FULL-PATHNAME

2) 转到Gerrit 上的更改页面并复制签出补丁命令

git fetch https://USER@GERRIT-SERVER/a/REPO-FULL-PATHNAME refs/changes/XX/YYYYY/Z && git checkout FETCH_HEAD

3) 重新设置更改的基线

git rebase origin/BRANCH

4) 解决冲突

git mergetool

5) 继续变基

git rebase --continue

重复步骤4和5直到冲突结束

git commit --amend

注意:保持相同的 Change-Id

6) 将新补丁集发送到 Gerrit

git push origin HEAD:refs/for/BRANCH

接受的解决方案有效,但我个人不同意此工作流程。这是不必要的麻烦。

我更喜欢只有一次合并的工作流程,因此步骤更少。

  1. 克隆 Gerrit 存储库(如果尚不可用)
    git clone https://[USER]@[GERRIT-SERVER]/a/[REPO-FULL-PATHNAME]
    
  2. 检查 Gerrit 补丁
    git fetch https://[USER]@[GERRIT-SERVER]/a/[REPO-FULL-PATHNAME] refs/changes/46/12346/N && git checkout FETCH_HEAD
    
  3. Soft-reset 零钱并存放起来
    git reset --soft HEAD~1 && git stash
    
  4. Checkout 分支或你想要变基的 Gerrit 补丁
    git checkout origin/BRANCH
    # or fetch other Gerrit patch:
    # git fetch https://[USER]@[GERRIT-SERVER]/a/[REPO-FULL-PATHNAME] refs/changes/45/12345/N && git checkout FETCH_HEAD
    
  5. 取消隐藏之前隐藏的更改
    git stash pop
    
  6. 使用您最喜欢的 3 向合并工具解决冲突。
  7. 提交合并的更改 - 不(!!)修改它们 - 并在消息中使用合并补丁中的相同 Change-Id:
    git commit -am "[COMMIT-MESSAGE]\
    \
    Change-Id: [FORMER-CHANGE-ID]"
    
  8. 将新补丁集发送到 Gerrit
    git push origin HEAD:refs/for/BRANCH
    

完成。一合并!


我还使用了 gitreview 工具。这使它变得格外容易。然后可以链接步骤 2、3、4 和 5。

git review -d 12346 && git reset --soft HEAD~1 && git stash && git review -d 12345 && git stash pop