Git 2 个分支之间的差异或合并完全丢失

Git Diff or Merge completely lost between 2 branch

我们是 git 的新手,(我们来自 perforce)我们现在使用 git 进行 2-3 次装载。今天我们在一个文件上面临一个奇怪的冲突合并。 Git 我们的 MergeTool (P4Merge) 完全丢失了文件上的更改并检测到 183 处更改或冲突! 因此,让我们从一些图像开始。我们有 2 个分支,DEV 和 FT/MEP。 Dev 有几项更改,因此我们决定在继续 FT/MEP 代码工作之前将更改从 DEV 合并到 FT/MEP。合并后,我们得到一个有冲突的文件,但在我们的合并工具中打开后,文件上的所有 change/conflict 都很奇怪。

所以我在旧的合并和最后一次提交之间对 DEV 分支的冲突文件进行了比较(绿线)

该文件只添加了一项功能:

我在FT/MEP分支(黄线)上做了同样的事情,在该分支中只添加了一个功能。

所以通常在合并之后,在解决冲突时,我将有一个函数从 REMOTE 添加,另一个函数从 LOCAL 和 MERGED 文件添加。 但是合并工具发现了一些变化,函数名称添加或删除,但我们从未接触过这些函数,它们都存在于两侧! 只是为了测试,我问 git 每个分支的 2 头之间的差异(就在合并之前):

我们得到了这个:

一切都搞砸了! 我不明白我们以及如何解决这个问题?

我们使用带有 Git ver 2.27.0 和 P4Merge

的 Sourcetree

谢谢你的帮助

您正在区分错误的东西,并且可能误解了您自己的结果。

合并是如何进行的?它从最新的 common 提交开始,即 merge base,在本例中是您的“dev: permissions Alain Carpentier”。它与 both 分支的最终提交进行比较,并同时针对合并基础重播 both 这些差异。我想您会发现,如果您查看这些差异,就会明白发生的事情。

请记住,git 对“只有一个功能”一无所知。它只是尽可能地逐行进行。如果一个文件中添加了一行而另一个文件中没有,则将其插入。如果一个文件中有删除的行,而另一个文件中没有,则将其删除。但是如果在 both 文件中添加了一行并且它们 不同 ,git 不知道如何继续;这就是“冲突”。

所以这里发生的事情是它以这种方式沿着文件前进,到达第 9904 行,并同时到达这两个函数。所以现在,正如您的 diff 工具所示,如果我们逐行查看,有些行在一个文件中是一种方式,而在另一个文件中是另一种方式。这些就是冲突。