【问题标题】:How to resolve a Git "CONFLICT (modify/delete)"?如何解决 Git “冲突(修改/删除)”?
【发布时间】:2022-04-28 02:29:15
【问题描述】:

我遇到了以前见过的 Git 合并冲突。

>git pull origin dev
From https://scm.starbucks.com/roastery-milan/choreographer
 * branch            dev        -> FETCH_HEAD
CONFLICT (modify/delete): <file name omitted> deleted in HEAD and modified in 01b734b9ae8594f03f5e481b123d80e41fb54d7c. Version 01b734b9ae8594f03f5e481b123d80e41fb54d7c of <file name omitted> left in tree.
...
Automatic merge failed; fix conflicts and then commit the result.

当我查看那些冲突的文件时,我看不到任何冲突的迹象。我想我需要更改 Git HEAD。但是,该怎么做呢?

顺便说一句,我们的 GitHub 最近发生了一些变化,并且有更多的分支用于暂存。

更新: 感谢大家的投入。现在,我知道如何处理这个问题了。

【问题讨论】:

  • 它实际上是说省略了文件名还是你这样做了?假设文件名为 name.html。你可以去尝试删除它。 git rm name.html 基于此,我无法判断发生了什么。另外,它说你以前见过这个,还是你的意思是你以前没见过这个?
  • git reset --hard

标签: git


【解决方案1】:

消息说您删除了当前分支中的一个文件,而其他人在您正在提取的分支中修改了它。您需要决定如何处理该文件。

如果你想保留文件

$ git checkout <filename>
$ git add <filename>
$ git commit

如果你想丢弃文件

$ git rm <filename>
$ git commit

如果文件被移动,您需要将更改复制到新位置。

【讨论】:

  • 如果我想保留该文件,git checkout 不起作用,它表明该文件未合并
  • @YitongFeng 我也遇到了同样的问题。我忽略了checkout 错误。我做了git add &lt;file&gt; 然后git commit 两次。第二次成功了。我不知道为什么,因为我背靠背做了。
  • @YitongFeng 这听起来像是一个新问题。如果您仍需要帮助,请单击提出问题按钮。您可以在新问题中添加指向此问题的链接,以帮助提供上下文。
【解决方案2】:

好像有一个文件你已经在本地删除了,但是被远程修改了:

CONFLICT(修改/删除):在 HEAD 和 在 01b734b9ae8594f03f5e481b123d80e41fb54d7c 中修改。

这是因为HEAD 指的是您的本地环境,而01b73 是您要合并的分支的尖端的SHA(通过pull)。

所以,Git 不知道是删除文件还是保留文件。

您应该首先确认是否要保留该文件。如果您想保留文件 (add) 或删除文件 (rm),这将暂存文件。

最后,创建一个commit 来解决冲突。

【讨论】:

    【解决方案3】:

    冲突的基本定义是您触及了他们也触及的一些源代码行。例如,给定:

    original line (in base): He said, "Hello world!"
    your replacement:        He said, "Hello wonderful world!"
    their replacement:       He said, "Goodbye cruel world!"
    

    Git 应该保留哪一行,应该丢弃哪一行,还是应该完全有第三种结果? Git 不知道,所以它把任务留给你。

    在这种情况下,您的(“HEAD”)更改是通过删除整个文件来删除每一行。他们的改变是修改文件的某些行。 Git 不知道该怎么做:它应该像你一样删除整个文件吗?它应该保留修改后的版本吗?或者,也许有一些第三种方法来处理这个问题。

    再次删除所有内容通常比重建它们的版本更容易(尽管这两种方式都不是真的那么困难),因此 Git 将它们的版本留在工作树中。如果这是正确答案,您可以简单地git add 文件告诉 Git:使用该版本。如果完全删除文件是正确答案,git rm 告诉 Git:完全删除文件。如果有第三个正确答案,请根据需要编辑文件以输入正确的内容,并git add 文件告诉 Git:使用该版本

    无论如何,您现在已经解决了这个特定文件的冲突(一旦您有git add-ed 或git rm-ed 适当的最终结果)。必要时解决其他冲突,然后完成合并:

    git commit
    

    或(从 Git 2.12 版开始):

    git merge --continue
    

    【讨论】:

      【解决方案4】:

      我相信当合并树的一侧删除了文件,而另一侧修改了文件时,就会出现这种情况。

      解决办法是:

      1) 删除文件('git rm ...'),这会给你一个听起来很糟糕的消息,但在提交时会正确删除文件。

      2)(我相信)添加文件('git add ...')然后提交。

      您可以根据自己想要的结果来决定需要哪种。

      【讨论】:

      • 谢谢!通过执行“git add。”直到我在保留备份后删除实际文件,继续变基,然后在成功变基后在单独的提交中再次添加这些文件时才工作。
      • 谢谢!我没想过要忽略这条消息和git rebase --continue。 (问题与 rebase 或 merge 相同。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2017-08-13
      • 2010-09-11
      相关资源
      最近更新 更多