有没有办法在不触及分支的情况下强制 Git 合并冲突?

Is there any way to force a Git merge conflict without touching branches?

情况:

我有一个分支master和一个分支feature。我想在 feature 中进行更改并将它们 PR 以掌握,其中一些更改被标记为合并冲突。

为了说明,假设在分支 master 中有一个文件 test.txt,就像这样。

foo

Feature 看起来像这样

bar
zed

我想从 feature master 创建一个 PR,其中一些更改(例如从 foo 到 bar 的更改)被标记为合并冲突并且必须手动解决。同时,一些更改,如添加 zed,未标记为冲突。本质上,我需要在关闭 PR 之前对这些类型的冲突进行手动干预以进行标记和解决,但我不希望审查所有更改。

有什么办法吗?可能通过手动将 git 冲突标记写入功能?

Is there any way to do this?

只能通过制造实际冲突。

可能有冲突的合并1 有三个输入:

  1. a merge base: 其他两个提交的共同提交,git merge,或人为选择的提交 git cherry-pickgit revert,例如;
  2. 当前提交HEAD--ours,有时本地);
  3. 另一个提交(有时称为 otherremote--theirs)。

发生低级(文件内)冲突时间:

  • 从合并基础到文件的当前副本的 git diff --find-renames 输出中,某些文件存在差异,
  • 从合并基础到另一个提交的 git diff --find-renames 输出中看到的同一文件存在差异,
  • 这些变化触及相同的线条,或者相邻(一个的结尾是另一个的开始)。

在这种特殊情况下,当 Git 尝试合并两组更改时,更改会发生冲突,您会看到冲突,除非您使用 -Xours-Xtheirs 自动从两个相互冲突的更改中选择一个。

(高级冲突也有相同的三个输入,但发生在例如差异 的一侧修改 文件,而另一侧 删除 文件。不存在冲突的行集,但仍然存在冲突:应该Git 保留修改后的文件,还是完全删除文件?)


1任何真正的合并——我指的是合并的过程,或者合并作为动词——都可能有冲突。这里的措辞是为了掩盖 git merge 有时不执行合并的事实,当它执行 fast-forward 操作时。