我将master
的更新版本合并到我的分支中。在master中,我删除了一个文件。 Git给了我以下内容:
Deleted merge conflict for 'Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs':
{local}: deleted
{remote}: deleted
Use (m)odified or (d)eleted file, or (a)bort?
为什么这是冲突?双方都被删除了,所以git应该删除它吗?
答案 0 :(得分:3)
首先,我们需要一些快速的背景术语。当您运行git merge xyz
时,Git会识别三个提交:
HEAD
,“本地”,--ours
等。我喜欢将此 L 称为Left或Local。xyz
标识的提交:“远程”,“其他”,--theirs
等。我喜欢将此 R 称为Right或Remote。Git计算从合并基础到 L 的差异,以及从合并基础到 R 的第二个差异。这两个差异可以对合并库中存在的文件进行不同的更改。
如果Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs
是合并基础提交中的文件并且在两个头中都被删除,则不会发生冲突,这不会发生。
但是,如果合并基础中存在Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs
并且在一次提交中重命名(也可能已修改)但在另一次提交中已删除,那么将是重命名/删除冲突。在这种情况下,git mergetool
将无法在 L 或 R 中找到Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs
。
换句话说,该特定文件将在工作树中删除。但是......应该是吗?你应该从基础提交恢复文件吗? git mergetool
脚本不知道。它提出了这个问题。
请注意,如果从基本提交还原文件,您仍将拥有重命名的文件。由你决定如何处理这件事。