【发布时间】:2017-06-08 06:16:44
【问题描述】:
我重命名了一个目录并将其合并到我的主分支中,当合并另一个分支时,git 将重命名目录中的相同文件识别为新文件。
在合并到另一个分支时,该目录中的相同文件出现“由他们添加”的合并冲突:
added by them: theirDir/same_file_name.xxx
我已重命名他们分支中的目录以匹配并继续获得“由他们添加”冲突。
当我尝试结帐时 --ours 我得到了
$ git checkout dir/same_file_name.xxx --ours
error: path 'dir/same_file_name.xxx' does not have our version
此时实际删除该文件,合并完成后删除该文件。
我该如何解决这个冲突?
--- m ----\ ------------ m1 --------------- mx ------- *!*
\ \ / \ / /
\ dir-rename-/ file_revisions-/ /
\ /
f2 ---------- file added by them conflict --/
在合并冲突之前发生了来自多个分支的多个文件修订。
【问题讨论】:
-
除了重命名目录之外,目录中的文件是否有变化?
-
不,正在合并的分支中的文件尚未更改。自从目录被重命名后,其中一些文件可能已经发生了变化。
-
我对哪个文件在什么时候在哪里有点困惑......你的意思是你退出合并,重命名目录并将其提交到他们的分支,然后再次尝试合并?
-
根据您的描述我无法重现:一个带有 master + 两个分支的 repo;重命名分支 1 上的目录,对 'dir' 中的文件进行一些更改,然后合并到 master;在分支 2 上,对不在 'dir' 中的文件进行更改,然后合并到 master。
-
每个差异都从两个提示提交的合并基础开始。要查找合并基,请使用
git merge-base --all <tip1> <tip2>,例如git merge-base --all master branch。如果这会打印多个合并基础提交,则下一步取决于您选择的合并策略,但通常您只会得到一个提交 ID。然后您可以git diff -M <base> <tip1>并重复<tip2>以查看 Git 会看到什么。请注意,您可以在git diff和git merge中调整-M重命名检测阈值。
标签: git merge rename git-merge renaming