GIt 合并不会删除被他们删除的文件

时间:2021-04-25 09:59:50

标签: git git-merge

我正在将一个分支合并到我自己的分支中。 另一个分支(“他们”)删除了我编辑过的文件。 当我合并时,我遇到了冲突。 git status 显示我的文件已被“他们删除”。

当我添加这个已删除的文件并提交时,该文件仍然存在。 为什么是这样?我想删除文件,这就是我添加删除的原因。 Example screenshot here

3 个答案:

答案 0 :(得分:2)

通过发出 git add 你告诉 Git 你仍然想保留这个文件。

在这种情况下,您需要发出 git rm 来告诉 Git 您不想保留该文件。

答案 1 :(得分:2)

<块引用>

我正在将一个分支合并到我自己的分支中。另一个分支(“他们”)删除了我编辑过的文件。当我合并时,我遇到了冲突。

没错。这就是文件没有删除的原因:你修改了它,他们删除了它,而 Git 不知道如何将这两个操作结合起来。

<块引用>

git status 显示我的文件已被“他们删除”。

请注意,此时 git status 显示了一些特殊的东西。一个“正常的”git status——这里我用正常这个词来表示在没有涉及这个特定文件的冲突时发生的——会告诉你关于git diff --name-status 比较该文件的 HEAD-vs-index 和 index-vs-working-tree 的结果。但由于该文件存在冲突,git status 会打印出完全不同的内容。

“被他们删除”状态是以下文件索引信息的结果(这里我将其称为“file F ”):

  • 有一个 stage-1 条目,表示该文件存在于合并库中。
  • 有一个第 2 阶段的条目,与第 1 阶段的条目不同:这是您修改后的副本。
  • 没有第 3 阶段的条目,表明该文件已在提交中被删除。
<块引用>

当我添加这个已删除的文件并提交时,该文件仍然存在。这是为什么?

git add 命令最初会忽略 F 的非零阶段副本。相反,它会查看您的工作树:

  • 如果您的工作树中有 F 的副本,它会将 F 的副本作为零阶段(“正常”,即无冲突)复制到 Git 中) 条目,擦除非零分阶段副本。
  • 如果您的工作树中没有F的副本,它会删除所有索引条目(在本例中为阶段 1 和 2)。

冲突消息在发出时提醒您,Git 将您修改后的文件保留在您的工作树中 — 出现在第 2 阶段 Git 索引中的相同副本。由于您没有删除此副本,git add 将此副本放入第 0 阶段。

您可以删除文件 F,然后像以前一样使用 git add,或者只使用 git rm F。使用 git rm 时,您有时会收到来自 Git 的投诉,但文件确实会被删除。

答案 2 :(得分:0)

首先删除新分支中的“foo”,当你将它合并到 master 时,它不应该显示 foo 文件 但在那之后你切换到 master 分支并再次创建一个新的 foo 并将新信息放入其中 所以这会产生冲突 先在master中创建一个foo文件然后在newbranch中删除它然后合并

相关问题