Git Diff或Merge在2个分支之间完全丢失

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

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

因此,我对DEV分支的冲突文件(绿线)在旧合并和最后提交之间进行了区分

仅在该文件上添加了一个函数:

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

因此,通常在合并之后,在冲突解决中,我将有一个函数从远程添加,另一个函数从本地添加合并文件。 但是合并工具发现了一些变化,函数名添加或删除,但是我们从未接触过这些函数,它们都存在于两侧! 为了测试,我向git询问每个分支的2个头部之间的差异(就在mergin之前):

他说我们得到了这个:

一切都搞混了! 我不明白我们该怎么解决这个问题

我们将Sourcetree与Git 2.27.0版和P4Merge一起使用


谢谢你的帮助

你散布了错误的东西,也许误解了你自己的结果

合并是如何工作的?它从最新的公共提交开始,合并基,在本例中是您的“dev:permissions Alain Carpentier”。它将这两个分支的最终提交进行区分,并在合并基础上同时重放这两个区分。我想你会发现,如果你看看这些差异,发生的事情将是有意义的

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

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