当我将branch1 merge 到branch2并将策略设置为-Xours
时,软链接(soft link)策略不会处理冲突。软链接(soft link) merge 失败。
知道如何处理这种情况吗?
步骤
git checkout branch2
git merge -Xours branch1 -m "syncing branch1"
最佳答案
所有符号链接(symbolic link)内容更改都被视为“高级”冲突,而不会涉及“低级” merge 代码。
如RomainVALERI answered ,-X ours
(或--strategy-option=ours
)被传递给 merge 策略,在您的情况下是默认的-s递归
.但对于递归和解析 merge ,(扩展)策略选项“我们的”仅适用于(普通)文件内的冲突。
请记住,git merge
的工作原理是:
- 找到当前
HEAD
提交以及您指定的其他提交的共同基点的提交; - 实际上做了两个
git diff --find-renames
:一个从 merge 基础到HEAD
,另一个从 merge 基础到其他提交; - 然后组合这两组更改,或者至少尝试这样做。
(将 merge 的更改应用于 merge 基础会产生 merge 结果。)
这两个git diff
可以找到更高级别(树级)的更改。例如,也许从 merge-base 到 HEAD
,您修改了 Readme.txt
,但它们删除了 Readme.txt
>。 Git 无法将这些结合起来,并且 -X ours
并不支持您的更改而不是他们的更改:无论如何,Git 只是声明 merge 冲突。同样,将文件从“常规文件”更改为“符号链接(symbolic link)”也不会由 -X ours
处理。
在您的特定示例中,"file"(实际上是 blob-content)没有更改模式,它只更改了内容:它曾经是指向某个路径的符号链接(symbolic link)A,现在它指向您这边的其他路径B,以及他们这边的第三条路径C。 Git可以通过按照-X ours
获取您的来解决此问题 - 但事实并非如此。 Git 强制您手动解决此冲突,就像它强制您手动解决修改/删除的冲突一样。没有 -X
选项有帮助。
编辑:这被声明为错误,并在 Git 2.17 中修复。从 Git 2.17 开始,-X ours
或 -X thoses
选择我们或他们的符号链接(symbolic link)。因此,如果您的 Git 是 2.17 或更高版本,则 could 会变成 does。
关于Git merge 解决符号链接(symbolic link)上的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51261454/