非常防御的git合并策略

非常防御的git合并策略,git,merge,Git,Merge,有没有一种方法可以防止git在文件的两个版本与公共祖先不同时自动合并文件 changes foo.cpp | ----y--- (branch-a) / --x----------z--- (branch-b) | also changes foo.cpp 让x作为文件foo.cpp的共同祖先 在提交y中,例如,从foo.cpp中删除函数栏()。Commitz在foo.cpp的末尾添加一

有没有一种方法可以防止git在文件的两个版本与公共祖先不同时自动合并文件

     changes foo.cpp
        |
    ----y---         (branch-a)
   / 
--x----------z---    (branch-b)
             |
         also changes foo.cpp
让x作为文件foo.cpp的共同祖先

在提交y中,例如,从foo.cpp中删除函数栏()。Commitz在foo.cpp的末尾添加一个函数bazz()

当我将branch-a合并到branch-b中时,我希望绝对确保合并后不再存在函数bar()。在递归合并策略中,有时会出现这样的情况:合并后会出现bar()

在这种情况下有什么最佳实践吗?

如果您看到
bar()
没有被删除,那一定意味着git出于某种原因认为结果中已经考虑(并覆盖)了更改。我的猜测是,合并被还原,或者作为共同祖先的提交(在两个分支分叉之前)在其中一个分支上被还原,或者类似的事情

重点是,这不是正常的行为,学习识别可能发生这种情况的情况可能比完全阻止git的合并功能更有意义

但是,回答你的问题,当然。您可以使用.gittributes来指定合并驱动程序,该驱动程序总是会导致合并失败。(一个快捷方式是将文件标记为
binary
),但这样做并获得任何类型的有用的“部分合并结果”要困难得多,需要自定义编码,超出了我在这里有用的概述。

如果你看到
bar()
没有被删除,那一定意味着git,出于某种原因,认为结果中已经考虑(并覆盖)了更改。我的猜测是,合并被还原,或者作为共同祖先的提交(在两个分支分叉之前)在其中一个分支上被还原,或者类似的事情

重点是,这不是正常的行为,学习识别可能发生这种情况的情况可能比完全阻止git的合并功能更有意义


但是,回答你的问题,当然。您可以使用.gittributes来指定合并驱动程序,该驱动程序总是会导致合并失败。(一个快捷方式是将文件标记为
二进制
),但这样做并获得任何类型的有用的“部分合并结果”要困难得多,需要自定义编码,超出了我在此有用地概述的范围。

“有时,合并后会出现bar()--这听起来像是一个未正确解决的冲突。您需要提供您在这里看到的具体细节,因为您对它的散文描述与Git的行为完全不匹配。很抱歉打扰您!在对修订进行了大量挖掘之后,结果证明确实是一个错误的合并冲突解决方案。“有时,合并后会出现bar()”--这听起来像是一个错误的冲突解决方案。您需要提供您在这里看到的具体细节,因为您对它的散文描述与Git的行为完全不匹配。很抱歉打扰您!经过大量的修改,结果证明这确实是一个错误的解决合并冲突。