当从主分支中删除文件后,如何解决rebase冲突?

6

master 分支创建了 A 分支。随后,B 分支是在几个提交 (到 master) 之后创建的。

A 的所有者更改了文件 fname。而B 的所有者则彻底删除了 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 命令继续进程。

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


你尝试过这个吗:https://dev59.com/U2035IYBdhLWcg3wSN4G - wcarhart
@wcarhart - 谢谢。如果我理解正确,那么建议是git rm fname然后git add -A。但是add -A不是一个全包括的命令吗?如果我有多个冲突(其中一些是问题描述中所述的性质,有些不是),我想逐个解决它们怎么办?或者,如果我在repo目录中有未跟踪的文件呢? - ysap
-A 包含所有更改,但您可以针对每个要保留的更改执行 git rm fname 然后单独执行 git add <file>。这样可以吗? - wcarhart
@wcarhart - 很遗憾,不行。这是我尝试的第一件事。出现了一个错误:fatal: pathspec 'fname' did not match any files - ysap
嗯,也许看看这个?https://dev59.com/r18e5IYBdhLWcg3wssLG#25458504 - wcarhart
@wcarhart - 不是这样的。该问题描述了不同的情况,而答案解决了不同的问题。 - ysap
1个回答

2
在这种情况下,您可以使用rm而不是git 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接