了解Git冲突的原因

时间:2016-10-24 09:30:23

标签: git git-merge-conflict

我们与3" main"分支,devuatmaster。然后我们使用" feature"任何新作品的分支,从master分支,然后将dev,PR合并回uatmaster

在PR uat期间,特别是一个开发人员看到生成的CSS几乎不变的合并冲突(我们正在使用SASS和gulp)。

虽然这听起来很意外,但差异非常令人惊讶:

+<<<<<<< destination:ac815dd…
.strip--beta .card-feed {
  background: transparent;
}
+=======
+>>>>>>> source:b49e50b72ee…

或:

@media (min-width: 1024px) {
+<<<<<<< destination:ac815ddf3…
   .copy h1 {
Add a comment to this line
+=======
+  .copy > h1 {
+>>>>>>> source:b49e50b72…
     font-size: 34px;
     line-height: 48px;
   }

我不明白为什么简单删除,几行或只是>会导致冲突。

最初,我们考虑查看行结尾等,但这是生成 ......

我们如何调查原因?有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

我猜你有理由将生成的CSS添加到git中,所以我在这里忽略了这个问题。

  

我不明白为什么一个简单的删除,几行,或只是一个&gt;会引起冲突。

但这恰恰是冲突的原因。 Git并不关心改变有多严重。您可以指示它忽略某些空格更改,但不能将多个换行符视为一个。

两个提交A和B的3向合并如下:

  • 寻找共同的祖先C.
  • 找出C和A之间的差异。
  • 找出C和B之间的差异。
  • 比较两组差异,不是逐行,而是逐块加密。根据定义,任何重叠线不相等的重叠线(可能是在空格标准化之后)都是冲突。

我想你必须要解决的真正问题是,如果其他一切都相同,生成的CSS对于这个开发人员来说与另一个不同。也许他使用不同的(版本)工具来生成CSS,并且(工具的版本信息)工具在存储库之外?