Git 移动一些文件后检测到合并冲突

Git merge conflict detected after moving some files

我们目前正在处理一堆文件,所有文件都在 git 存储库中进行了跟踪。 在某些时候,我们不得不移动这些文件的一部分,我们使用 :

git mv repo/file.c new_repo/

在对 "new_repo/file.c" 进行一些修改后(修改,我的意思是很多更改),我们必须在主分支上进行 rebase(其中的文件没有被移动)。

假设这个分支 "repo/file.c" 已经被修改,GIT 是否会检测工作分支上的 "new_repo/file.c" 和主分支上的 "repo/file.c" 之间的合并冲突?这些文件即使修改了很多也认为是相同的吗?

Git 将尝试 检测 合并一侧的哪些文件对应于使用 [=15= 合并另一侧的哪些文件]相似性启发法(文件及其文件名的相似程度)。

通常有效O.K。如果没有,并且您使用了增量更改(即文件更改是渐进的,逐个提交),您可以尝试使用 git-imerge 工具。

Git 不存储副本和重命名,它尝试使用试探法找出它们。它并不总是很努力。可以告诉默认合并策略(递归)更加努力。

rename-threshold=<n>
    Controls the similarity threshold used for rename detection.
    See also git-diff(1)-M.

相似性阈值定义为...

(i.e. amount of addition/deletions compared to the file's size). For example, -M90% means Git should consider a delete/add pair to be a rename if more than 90% of the file hasn't changed. Without a % sign, the number is to be read as a fraction, with a decimal point before it. I.e., -M5 becomes 0.5, and is thus the same as -M50%. Similarly, -M05 is the same as -M5%. To limit detection to exact renames, use -M100%. The default similarity index is 50%.

我不知道递归合并的默认值是多少,大概是 50%。尝试 git merge -X rename-threshold=50% 然后 40%、30% 等等。