git - 为什么 git 在双方都被删除时给我一个 "deleted merge conflict"?

标签 git

我正在将 master 的更新版本 merge 到我的分支中。在 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 应该删除它吗?

最佳答案

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

  • 您当前的提交:HEAD、“local”、--ours 等等。我喜欢称其为 L,代表左派或本地派。
  • 另一个提交:由 xyz 标识的提交:“remote”、“other”、--theirs 等等。我喜欢将此称为 R,表示“右”或“远程”。
  • 第三次提交:LR 的第一个共同点。这是 merge 基础提交。

Git 计算从 merge 基到 L 的差异,以及从 merge 基到 R 的第二个差异。这两个差异可以对 merge 库中存在的文件进行不同的更改。

如果 Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs 是 merge 基础提交中的一个文件并且在两个头中都被删除,则不会有冲突,并且不会发生这种情况.

但是,如果 Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs 存在于 merge 库中并且在一次提交中被重命名(也可能被修改)但是在另一个提交中删除,将会有重命名/删除冲突。在这种情况下,git mergetool 不会在 L 中找到 Lib/SharedBL/WebServices/WebAPI/Admin/Admin.cs R.

换句话说,该特定文件将在工作树中删除。但是……应该这样吗?你应该从基本提交中恢复文件吗? git mergetool 脚本不知道。它向您提出了这个问题。

请注意,如果您从基础提交中恢复文件,您仍将拥有重命名的文件。您可以自行决定如何处理。

关于git - 为什么 git 在双方都被删除时给我一个 "deleted merge conflict"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708659/

相关文章:

ruby - Git 找不到设置的 buildpack

Git 找不到 .ssh

git - 使用git本地跟踪项目后,如何将其添加到GitHub?

git - 从dockerfile进行git clone时我怎么知道我在哪个git分支上

Git 如何在没有 merge 提交的情况下进行 merge ,但保留哈希值(在 git 日志中具有直线图形)

Git 不跟踪现有文件中的更改

git - 无法连接到 bitbucket.org 端口 443 : Network is unreachable

git - Octopus merge : cosmetic, 还是某些情况下必不可少?

git - 克隆特定的提交位桶

git - 为什么 Git 子树总是处理每个提交?