在两个分支中移动文件时,Git合并失败
我正在执行一个git合并,在合并的两个分支中以相同的方式移动了许多文件。令我惊讶的是,git在我合并的分支中找不到大约10个文件的版本 i、 文件从/path/file.txt开始。在分支1中,文件被修改,然后移动到/path/newpath/file.txt。在分支2中,文件被移动到相同的路径/path/newpath/file.txt。当我合并时,我希望git能够处理这个问题。但是,它将此显示为合并冲突,表示文件已从分支1中删除。我有三个问题:在两个分支中移动文件时,Git合并失败,git,Git,我正在执行一个git合并,在合并的两个分支中以相同的方式移动了许多文件。令我惊讶的是,git在我合并的分支中找不到大约10个文件的版本 i、 文件从/path/file.txt开始。在分支1中,文件被修改,然后移动到/path/newpath/file.txt。在分支2中,文件被移动到相同的路径/path/newpath/file.txt。当我合并时,我希望git能够处理这个问题。但是,它将此显示为合并冲突,表示文件已从分支1中删除。我有三个问题: 为什么git找不到这些文件?我天真地希望git
git update index--index info索引保存您想要提交的内容,因此索引中的路径应该是合并提交中的路径。但是,这里有多条路径,因此请参见下面对#3的回答 按顺序回答您的问题:
HEAD
,运行git merge
时的提交/分支,以及merge\u HEAD
,请求合并的提交)。这会产生两个单独的差异,每个差异都有各自的重命名检测
在这种特殊情况下,在两个分支中,path_a
被重命名为path_b
,但实际上只检测到一个重命名。(如果两个重命名均未检测到,则会出现“创建/创建冲突”git认为,path\u b
是在两个分支中独立创建的。如果检测到两个相同的重命名,git只会“从基础中的path\u a
合并到HEAD
和merge\u HEAD
中的path\u b
。因此我们可以得出结论,git在这里只成功了一半。)
由于git没有注意到两个diff中的一个中的path\u b
实际上是从path\u a
重命名的,它决定在该diff中,您只需删除path\u a
并编写一个完全不同的path\u b
。它无法合并任何更改,因为HEAD
中的path\u b
与无关>路径b
在合并头中
您链接到的索引更新问题显示了如何告诉git,不,事实上,在这两种情况下,path_b
s都是相关的,合并基础版本只是命名为path_a
。然后,最终的“git checkout-m”创建适当的合并版本(可能存在合并冲突)
-X rename threshold
选项是目前唯一的选项。按照您链接到的问题中的链接,脚本可以“事后”告诉git它错过的任何重命名