Git在合并时将文件显示为已删除,但文件在分支中存在

时间:2014-12-05 17:36:37

标签: git merge

我有一个我无法解释的问题。在分支'release-14-5'中,我有一个文件EquityException.java,我清楚地看到,当我清理该分支的副本时文件就在那里(即git clone,git pull)

但是当我将该分支合并到'production'分支(也包含相同的文件)时,我看到合并说文件在分支'release-14-5'中被删除

CONFLICT (rename/delete): somefolder/EquityException.java deleted in release-14-5 and renamed in HEAD. Version HEAD of somefolder/EquityException.java left in tree.

如果我在'release-14-5'中清楚地看到该文件,甚至当我在'生产'和'发布-14-5'之间进行Intellij比较时它是如何表示它没有差异?

1 个答案:

答案 0 :(得分:1)

仅比较两个分支头productionrelease-14-5是不够的。

进行合并时,合并将返回到分支发散的祖先点。你可以找出自己的观点:

git merge-base production release-14-5

此命令的输出是共同祖先提交的哈希值。

现在仔细检查每个分支上的日志,返回到此合并基点。您可能会找到解决为何存在此类冲突的答案。很可能,两个历史记录中至少有一个删除了该文件然后将其放回原处。 (要研究的一个有用的问题是:文件是否存在于合并基点?)

当Git合并分支时,它会单独考虑两个分支上的所有提交都返回到合并库;它并不仅仅是做一个三方差异"。因此,它可以通过删除存在于两个分支和合并库中的文件的提交来绊倒,即使是后续提交也会恢复文件。