(注:目前这并不是一个真正的答案。)
合并冲突中我们拥有的信息来自于两个标记,具体如下:
HEAD:salesforce_sfdx/force-app/main/default/pages/xyz.page-meta.xml
development:salesforce_sfdx/force-app/main/default/pages/abc.page-meta.xml
这告诉我们,对于这个文件,索引槽#2(
--ours
)的内容来自
HEAD
提交中的
salesforce_sfdx/force-app/main/default/pages/xyz.page-meta.xml
,而索引槽#3(
--theirs
)的内容来自
development
提交中的
salesforce_sfdx/force-app/main/default/pages/xyz.page-meta.xml
。因此,该文件必须存在于两个提交中,并且必须有一个
合并基础版本的该文件,该版本将位于索引槽#1。
这里还有几件事情很有用。特别是,
merge.conflictStyle
在这里明显设置为
merge
。这隐藏了一些信息;如果它被设置为
diff3
,我们会得到更多信息。不过,我们可以重构这些信息。
首先,我们想知道哪个提交是该合并基础版本的源。要找出,请运行:
git merge-base --all HEAD MERGE_HEAD
如果一切顺利,这将输出一个单独的提交哈希 ID,或者如果情况不理想,则会输出多个哈希 ID。
其次,我们想知道索引槽#1中相应行中实际包含的内容。 很容易获得:git show :1:salesforce_sfdx/force-app/main/default/pages/xyz.page-meta.xml
应该提取整个文件,然后我们可以进行检查。
如果git merge-base
命令显示多个提交,则可能合并基础是“虚拟提交”(由git merge-recursive
或git merge-ort
或此处使用的任何策略创建)。 在这种情况下,合并基础本身可能包含合并冲突。
无论如何,肯定有三个输入文件。 如果只有一个合并基础,那么我们的情况就好多了,因为我们可以使用git diff --find-renames
找出所有三个提交中的这三个文件。 只需获取合并基础哈希 ID 并运行:
git diff --find-renames <hash> HEAD > /tmp/ours
git diff --find-renames <hash> MERGE_HEAD > /tmp/theirs
现在这两个/tmp
文件包含了差异结果,包括任何检测到的重命名。这两个输出文件的HEAD
和development
提交名称相同(salesforce_sfdx/force-app/main/default/pages/xyz.page-meta.xml
),因此真正的问题是合并基础文件的名称是什么。
有了这些额外的信息,我们可以继续查看为什么会出现合并冲突,并确定这是否代表了某种Git错误。