从 master 中删除文件时如何解决 rebase 冲突?

How to resolve a rebase conflict when file was removed from master?

master开始,A分支被分支。然后,一些提交(到 master)之后,B 分支被分支。

A 的所有者更改了文件 fnameB 的所有者一共删除了 fname

然后,B 变基并合并到 master。现在,A 将被重新定位和合并。但是现在 A 的所有者与文件 fname 发生冲突,表示:

CONFLICT (modify/delete): fname deleted in HEAD and modified in "commit msg". Version "commit msg" of fname left in tree.

通常,通过编辑中间文件解决冲突,git add fname 它然后 git rebase --continue 过程。

但是如何解决已删除文件的冲突?最终结果应该是文件被删除了。

在这种情况下,您可以不使用 git rm 而是使用 rm.

删除文件
rm fname
git add fname
#Fix any other conflict
git rebase --continue

无论您以何种方式留下文件,它都将用于正在生成的新提交中。


发生了什么:

  1. 变基因冲突而中断。
  2. 如果你查看日志,你当前的HEAD是master的头部。
  3. 您有一个不存在于此 HEAD 中的文件。这意味着您不能询问 git rm 因为该文件不受版本控制。
  4. 我们只是删除文件,就好像您要处理一个您不想提交的新文件一样。

如果当前提交中的唯一更改是在这个已删除的文件上,您将收到此错误:

`No changes - did you forget to use 'git add'?`

这是因为没有什么可提交的(您刚刚删除了 git 中不存在的文件)在这种情况下,您可以 git rebase --skip 而不是 --continue