解决Gerrit合并冲突的步骤和详细的命令

1,349 阅读3分钟

在这篇文章中,我们已经解释了解决Gerrit合并冲突的步骤和详细的命令。这可以在控制台中使用 rebase 命令解决,也可以手动解决,修复代码中的冲突。

前提是:

在Gerrit上修复合并冲突

当你试图对你的拉动请求进行回溯时,你会发现有一个合并请求。你可以使用拉动请求页面上的 "rebase "按钮来重新设置。

"Rebase "意味着将其他已经合并的修改带入你的版本中,以确保所有东西都能正常工作。

合并冲突可以通过以下步骤解决:

  • 使用 "git fetch "更新你的本地仓库
  • 使用 "git rebase "运行手动重定位
  • 使用 "git mergetool "或 "git rebase --continue "解决冲突
  • 对冲突部分的代码进行修改(文件列表将显示在命令行上)
  • 使用 "git commit --amend "提交已解决的代码
  • 使用 "git push "将新的补丁集推送到Gerrit

命令

使用下面的命令:

git fetch

这将带来Gerrit中与拉动请求相关的最新代码变化。

使用下面的命令:

git rebase

这将试图重新建立拉动请求的基础。这也可以使用Gerrit用户界面来完成。如果出现合并冲突,该步骤将失败,唯一的选择是在控制台中解决合并冲突。

该命令将列出存在冲突的文件。请注意这些文件,因为我们需要逐一打开并解决冲突。

修复冲突

使用vi和vim命令逐一打开文件并解决冲突。在每个文件中,按ESC键搜索HEAD,然后输入"/"键,再输入HEAD,最后按ENTER键。

这将是HEAD的第一次出现,这是冲突的开始。按N键进入到下一个出现的文件。

一个冲突看起来像这样:

<<<<<<< HEAD:file.txt
original code snippet
=======
conflicting code snippet
>>>>>>> commit-id:file.txt

修改这样的部分:

  • 保留原代码段,删除冲突的代码段
  • 或保留冲突的代码片段,删除原始代码片段
  • 保留修改后的代码片段

一旦完成,删除表示冲突的行,如:

<<<<<<< HEAD:file.txt
=======
>>>>>>> commit-id:file.txt

一旦修复了一个文件中的所有合并冲突,按ESC键和:wq键退出该文件。

对所有有冲突的文件都这样做,然后用git add命令添加已修改的文件:

git add changed-file.txt

一旦完成,继续下一步,使用下面的命令:

git rebase --continue

这将接受新的修改,并继续进行重定位。如果你已经成功解决了冲突,这一步就会通过。如果出现错误,请修复该命令所报告的冲突并再次修复该步骤。

使用下面的命令:

git commit --amend

这将提交没有合并冲突的新修改:

使用下面的命令:

git push

这将会用重构后的修改更新你的拉动请求。

有了这个,你就能解决合并冲突,如果有多个开发者在同一个项目上工作,就会发生这种冲突。