Git 什么样的变化会导致冲突?

Git 什么样的变化会导致冲突?,git,git-merge,Git,Git Merge,我想知道是否有一种方法可以预测合并后的冲突,从而避免冲突 所以我的问题是:什么样的变化会导致冲突?很难从实验中推断出这一点 如果我修改代码,什么样的修改是无害的,什么样的修改会导致合并问题,需要用户注意 例如: 添加新行 更换线路 移线 通过添加/删除文本(在开头、结尾或中间)更改行 是否有任何规则?当两个分支中的相同文件和相同行中发生更改时,将发生冲突,否则不应发生冲突。通常,影响相同行的更改会导致冲突。如果您添加或删除一行,而其他人更改了该行,或者您更改了缩进,而他们更改了该行,则会发生

我想知道是否有一种方法可以预测合并后的冲突,从而避免冲突

所以我的问题是:什么样的变化会导致冲突?很难从实验中推断出这一点

如果我修改代码,什么样的修改是无害的,什么样的修改会导致合并问题,需要用户注意

例如:

  • 添加新行
  • 更换线路
  • 移线
  • 通过添加/删除文本(在开头、结尾或中间)更改行

是否有任何规则?

当两个分支中的相同文件和相同行中发生更改时,将发生冲突,否则不应发生冲突。

通常,影响相同行的更改会导致冲突。如果您添加或删除一行,而其他人更改了该行,或者您更改了缩进,而他们更改了该行,则会发生冲突


这并不是说,不会引起冲突的更改不会互相弄乱,因为在源代码管理中与您的更改不冲突的10行上的一个更改可以轻松删除或重命名您的更改正在使用的变量。这就是自动构建系统存在的原因:)

如果Git的算法无法找出如何合理化同一故事的两个版本,它将冲突而不是自动合并。您不应该担心这一点,只需专注于编写好的代码。我从你描述的所有场景中都看到了冲突。我不认为这总是正确的。所以你是说,如果我在
.java
文件中添加一条注释,例如
//comment
总是会有冲突?只有在其他人编辑了该行或相邻行的情况下。换句话说,当存在重叠更改时会发生冲突,因此版本控制系统不知道如何应用这些更改。只需在一个brahnc中的注释前添加一个空格,并在另一个分支中的注释中添加一个单词,然后将它们合并。哦,我希望合并比在另一个合并中将整行与同一文件中的同一行进行比较更聪明,但我想为此,它必须了解正在合并的文件类型。嗯,也许它可以以某种方式进行配置,但根据我的经验,即使在同一行的不同分支中添加/删除了一些导入(java文件),它也总是需要帮助,可以很容易地说自动添加这两个导入,然后如果不使用某个导入,我将稍后删除它。但我总是要通过自己添加所有导入来解决冲突。因此,一般的经验法则是,如果两个人处理同一个文件,那么当我们试图合并他们时,很可能会发生冲突。知道这一点很好,因为这样我们可以更好地协调工作,避免解决这些冲突。当然,可能会出现其他错误,但在IDE中解决调试器/编译器问题比解决存储库问题更容易。当然,这是一个一般规则,尽管在一个大型项目中,当您构建了许多实用程序函数和类似功能时,如果不修改同一文件,仍然会遇到问题。例如,您的项目可能有一个实用程序类来加载配置设置,用户“Bob”更改该功能并到处更新代码,但“Alice”开始在她编写的新文件中使用配置。全新的文件现在破坏了构建,因为Alice没有按照Bob的更改要求调用函数。