我正在将 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,表示“右”或“远程”。 - 第三次提交:L 和 R 的第一个共同点。这是 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/