Git merge 解决符号链接(symbolic link)上的冲突

标签 git merge branch symlink conflict

当我将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/

相关文章:

TFS 2010 : How to re-branch using same name but different source branch?

git - 我可以 pull 到我所在的分支以外的分支吗?

git - git rebase --onto --preserve-merges再现了我已经在 merge 中解决的冲突

svn - TortoiseSVN提交失败: MERGE failed

merge - 在不同的文件中查找重复的函数名称

tfs - 在 TFS 中处理死分支的最佳方法是什么?

c++ - 分支预测优化

git - 如何使用 merge 分支从 TFS pull 请求中排队 Jenkins 作业

git - 无法从 ubuntu 服务器上的 git 提取最新代码

git - 为什么我收到消息 "fatal: This operation must be run in a work tree?"