git automerge 结果对单个文件等不令人满意,我宁愿手动使用三向差异来解决该问题

tom*_*255 2 git merge git-merge-conflict

我一直使用 git 进行合并。我对接下来发生的事情感到恼火,我想知道是否有更好的工作流程方法(我缺少的命令,另一种方法,等等)。

当我 git merge 到my/branchlike时git merge --no-ff --no-commit that/other-branch,我通常会解决冲突。现在这一切都完成了,我检查所有更改,以防自动合并出错(如果您想知道,因此是 --no-commit)。

上次,我发现了一个自动合并,你会笑的,我宁愿有一个冲突。事实上,自动合并会丢弃一些我不希望它丢弃的东西。

这里有一个简短的括号:我不是在讨论 git 的自动合并对于最新的公共基础来说是正确还是错误。我只是告诉你,好吧:我宁愿让 git 在大型合并的其他文件中重播该单个文件的游戏,并将其标记为冲突,以便我手动编辑。

所以,当前的设置是:

  1. git merge --no-ff --no-commit
  2. 有冲突需要解决,编辑它们,添加它们。完毕。让我们继续。
  3. 我检查差异(包括自动合并):git diff HEAD
  4. 我发现foobar自动合并的文件的方式令我不满意。

那么命令 #5 是什么:

  1. foobar在步骤 #1 的大合并中间重放单个文件的合并,以强制将其标记为与三向差异友好文件冲突,即使用 <<<<<<< ======= >>>>>>> 而不是自动合并的结果。

谢谢。

tor*_*rek 5

LeGEC 的回答很好,除了添加警告之外,没有什么可说的。这应该是一条评论,但我想包含一些格式,这在评论中是不可能的。此外,评论长度限制也令人不安。

\n

每当 Git 的自动合并以某种方式合并某些内容,并且您覆盖它并提供一些不同的结果时,就会产生一些人所说的邪恶合并。(参见git 中的邪恶合并?)这确实没有错,但存在危险:类似的命令git rebase --rebase-merges实际上并不保留现有的合并提交,而是重新运行代码git merge。如果 Git 已经生成(并且确实生成)了某个文件作为自动合并而没有冲突,则此重新运行合并将再次生成该文件。你必须在这里停止进程并重做你的“邪恶合并”效果。

\n

因此,您可能想要继续提交“坏”结果,然后添加额外的提交来修复它。这种“治疗”(通过添加修复提交来避免邪恶合并)在某些方面比一开始的“疾病”更糟糕,但它允许代码--rebase-merges工作。

\n

或者,您可以将一些内容作为新的提示提交专门插入到两个分支中,以便在您想要手动合并的区域中因冲突而git merge 失败。这也有一些缺点,但意味着重新合并将重新使用记录的重新解决方案(如果您已打开git rerere)或再次停止以进行手动合并。

\n

作为最后的替代方案,您可以添加新的提示提交,以确保自动合并结果是您想要的。这些是否是“损坏的提交”,与中间替代方案产生故意损坏的提交的含义相同(从而导致合并失败\xe2\x80\x94,但请注意,无论您使用哪种语言,都应将“损坏”作为注释使用,可能就足够了)或不使用可能取决于具体情况。

\n