如何使用 GitHub PR 进行文件内容的双向合并?

How to do a two-way merge of file contents with GitHub PR?

在 GitHub 中,如何在 PR 中进行双向合并,以便不删除目标分支中未在源分支中明确删除的任何行?

我附上了显示问题的 GitHub PR 的屏幕截图。

作为 PR 的一部分,我想:

(1) 优先从源分支(右)到目标分支(左)更改行;

(2) 维护目标分支(左)中未在源分支(右)中明确删除的任何行

问题是 GitHub 似乎只是从源分支(左)中删除了目标分支(右)中未包含的任何行,而我想将组合合并在一起。

如果这不能直接在 GitHub 中实现,那么是否有可以与 GitHub 集成的工具来进行这种双向合并?

谢谢。

github-pr-screenshot-merge-problem

GitHub 使用 libgit2 进行合并,其工作方式与 Git 进行合并的方式类似,但不完全相同。在这两种情况下,合并都是 three-way 合并,它同时考虑两个头和称为 merge base 的提交,这通常是最近的共同祖先。删除被视为更改,因此包含在内。

无法使 GitHub 进行 two-way 合并。如果你想要这种行为,你必须有一个自定义工具(例如,一个机器人)来执行合并并将提交推送到目标分支。只要结果提交包含父分支的对象ID作为提交之一,PR就会自动关闭。

Git 在 git read-tree 中确实有 two-way 合并。我不确定它是否提供了您想要的语义,但这是它提供的唯一 two-way 合并。如果将该数据读入索引,则可以使用 git write-treegit commit-tree 来合成合适的合并提交。

可能是为了得到你想要的语义,你需要一个自定义的合并工具。但是,您的目标更有可能通过与 Git 一起更优雅地工作的不同工作流程来实现,如果您提供了有关该工作流程的更多信息,我们可以建议这样的解决方案。