我有分支feature1
和master
然后在feature1
中,我将文件dir/file.txt
重命名为dir2/file2.txt
之后我改变了master
中的文件,一周之后也改变了feature1
中的文件。
我在整个项目中更改了40个文件。
当我尝试将 master
合并到feature1
时,我使用的是低重命名阈值。
大多数文件都是正确自动合并的。某些文件可用于手动解决冲突。
但是某些具体文件既未出现在merge
响应中,也未出现在自动合并中
也没有正确合并。在正确下,我期待我能解决的两个结果中的一个:
1.它无法检测到重命名,只需在dir/file.txt
分支中添加另一个feature1
2.它会检测重命名并让我手动解决冲突。
用VB查看时有很多变化
git difftool master:dir/file.txt feature1:dir2/file2.txt
因此我假设git识别重命名并决定保留我的版本 没有告诉我发生了什么。 我该如何解决/调试呢?
这是我使用的命令
git config merge.renameLimit 9999999999
git merge --no-ff -Xrename-threshold=20 -Xignore-space-change master
在使用feature1
分支时,我删除了dir/file.txt
也许git假定这个文件应该删除,因此忽略它在master
中的存在
重命名检测失败,尽管文件的相似性保持不变(levenshtein距离小于内容长度的2%)
Another discussion建议“手动合并”将文件从分支复制到分支。
正确解析了其他一些文件
CONFLICT (rename/delete): images/ab.gif deleted in master and renamed in HEAD. Version HEAD of cdn/img/ab.gif left in tree.
已在master
中删除并合并到feature1
的文件已正确解析。合并时无法识别feature1
中删除(或移动)的文件
的建议吗?
目前我正试图合并另一种方式。将feature1
合并到master
并查看哪些文件
正在添加和删除。通过这种方式,我将git fail识别为重命名并采用手动合并的文件列表。
答案 0 :(得分:1)
如果你要从你的repo中删除文件 - git正在跟踪这个删除,并且在确定要做什么时合并正在考虑这个。
这可能不是你所做的全部,但它是其中的一部分。你可以尝试git再次添加它们。
答案 1 :(得分:0)
因此,我认为git会识别重命名并决定保留我的版本而不通知我发生了什么。
Git 2.13(2017年第二季度)实际上会告诉你更多关于发生了什么的事情:
"
git merge
"检测在一个历史记录中重命名的路径,而另一个历史记录被删除(或修改)它,它现在报告两条路径,以帮助用户了解正在合并的两个历史记录中发生了什么。
commit b26d87f见Matt McCutchen (mattmccutchen
)(2017年1月28日)
(Junio C Hamano -- gitster
--于2017年2月27日commit 74aabf4合并)
merge-recursive:make" CONFLICT(rename / delete)"消息显示两个路径
"
git merge-recursive
"打印的当前消息用于重命名/删除 冲突是这样的:
CONFLICT (rename/delete):
new-path deleted in HEAD and renamed in other-branch.
Version other-branch of new-path left in tree.
为了更有帮助,该消息应显示重命名和路径 说明删除发生在旧路径,而不是新路径。所以 将邮件更改为以下格式:
CONFLICT (rename/delete):
old-path deleted in HEAD and renamed to new-path in other-branch.
Version other-branch of new-path left in tree.
因为这会使handle_change_delete中的案例数翻倍(修改vs. 重命名),重构代码,通过合并再次将案例数减半 o-> branch1有变化的情况,o-> branch2有删除 相反的情况。