【发布时间】:2012-10-12 04:42:43
【问题描述】:
我有分支 feature1 和 master。
然后在feature1 中,我将文件dir/file.txt 重命名为dir2/file2.txt。
之后我修改了master 中的文件,一周后也修改了feature1 中的文件。
我在整个项目中更改了 40 个文件。
当我尝试将 master 合并到 feature1 时,我使用的是低重命名阈值。
大多数文件都已正确自动合并。提供一些文件用于手动解决冲突。
但是一些具体的文件在merge响应中都没有自动合并,
也没有正确合并。在正确下,我预计我可以解决以下两种结果之一:
1.它不会检测到重命名,只是将另一个dir/file.txt添加到feature1分支中。
2. 它会检测重命名并让我手动解决冲突。
当我用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
更新1
在使用feature1 分支时,我删除了dir/file.txt。
也许 git 假定该文件应该被删除,因此忽略它在 master 中的存在。
重命名检测失败,尽管保留了文件的相似性(levenshtein 距离小于内容长度的 2%)
Another discussion 建议“手动合并”将文件从一个分支复制到另一个分支。
更新2
其他一些文件已正确解析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 中删除(或移动)的文件在合并时无法识别。
建议?
更新3
目前我正试图以相反的方式合并。将feature1 合并到master 并查看哪些文件
正在添加和删除。这样,我将列出 git 无法识别为重命名的文件列表并诉诸手动合并。
【问题讨论】:
-
您是否尝试过在 master 之上重新设置 feature1,而不是将 master 合并到 feature1 中?
-
我做到了。得到了相同的效果,但不同的文件被“遗忘”。我最终手动合并了那些被删除和重命名的文件。
-
这很有趣;这似乎正是 rebase 可以很好地处理的情况类型。您可能会尝试弄乱合并策略,但我不确定您问题的根源。 kernel.org/pub/software/scm/git/docs/git-merge.html(合并策略部分)
-
也许这里的解决方案会有所帮助:: stackoverflow.com/questions/4722423/…
-
如何删除受版本控制的文件? git rm 将帮助管理这些事情并做正确的事情。如果是一个动作,那么 git mv 会做正确的事情。当然,您仍然需要对它们进行上演。关于您的第三次更新,不要忘记您可以直接从其他分支或存储库签出文件。这可能有助于您恢复这些文件。