2014-12-05 306 views
0

我有一个我无法解释的问题。在分公司的“解除-14-5”我有一个文件EquityException.java,我清楚地看到,文件是存在的,当我做的那支干净的副本(即git的克隆的git拉)Git在合并时显示文件被删除,但文件在分支中

但是,当我认为合并分公司“生产”分支(其中还包含相同的文件),我看到的合并说文件是在分支删除“发布-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. 

这怎么可能,如果我清楚地看到“该文件发布-14-5“,甚至当我在Intellij中比较”制作“和”发布-14-5“时,它说没有区别?

回答

1

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

当您进行合并时,合并会返回到分支分歧的祖先点。你可以找出你自己的点:

git merge-base production release-14-5 

这个命令的输出是公共祖先提交的散列。

现在仔细检查每个分支上的日志,返回到此合并基点。你很可能会找到答案为什么会有这样的冲突。很可能,两个历史中至少有一个删除了该文件,然后将其放回。 (需要调查的一个有用的问题是:该文件是否存在于合并基础点?)

当Git合并分支时,它会单独考虑两个分支上的所有提交返回到合并基础;它不只是做一个“三方差异”。因此可以通过提交删除两个分支和合并基础中存在的文件,甚至在后续提交时还原文件。