了解 Git 冲突原因

Understanding Git conflict cause

我们使用 3 个 "main" 个分支,devuatmaster。然后我们对任何新工作使用 "feature" 分支,从 master 分支,然后合并回 dev,PR 到 uatmaster.

uat 的 PR 期间,特别是一位开发人员,发现生成的 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;
   }

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

最初,我们想查看行尾等,但这是 生成的

我们将如何调查原因?有谁知道为什么会这样?

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

I don't understand why a simple removal, of a couple of lines, or just a > would cause a conflict.

但这正是冲突所在。 Git 不关心变化的严重程度。您可以指示它忽略某些空白更改,但不要将多个换行符视为一个换行符。

两个提交 A 和 B 的 3 向合并是这样工作的:

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

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