【问题标题】:How to resolve a rebase conflict when file was removed from master?从 master 删除文件时如何解决 rebase 冲突?
【发布时间】:2020-01-06 16:07:53
【问题描述】:

master,分支A 分支。然后,几次提交(到master)之后,B 分支被分支了。

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 进程来解决冲突。

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

【问题讨论】:

  • @wcarhart - 谢谢。如果我理解正确,那么建议是git rm fname 然后git add -A。但是add -A 不是包罗万象的命令吗?如果我有多个冲突(其中一些是问题中描述的性质,有些不是),我想一一解决怎么办?或者,如果我在 repo 目录中有未跟踪的文件?
  • -A 将包含所有内容,但您可以针对要保留的每个更改单独执行 git rm fnamegit add <file>。这行得通吗?
  • @wcarhart - 不幸的是,不是。这是我尝试的第一件事。出现错误:fatal: pathspec 'fname' did not match any files

标签: git rebase git-merge-conflict


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2014-11-11
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多