为什么git会给我一个"删除的合并冲突"当双方都被删除?

时间:2018-02-09 15:05:29

标签: git

我将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应该删除它吗?

1 个答案:

答案 0 :(得分:3)

首先,我们需要一些快速的背景术语。当您运行git merge xyz时,Git会识别三个提交:

  • 您当前的提交:HEAD,“本地”,--ours等。我喜欢将此 L 称为Left或Local。
  • 另一个提交:由xyz标识的提交:“远程”,“其他”,--theirs等。我喜欢将此 R 称为Right或Remote。
  • 第三次提交:第一次提交 L R 。这是合并基础提交。

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脚本不知道。它提出了这个问题。

请注意,如果从基本提交还原文件,您仍将拥有重命名的文件。由你决定如何处理这件事。