如何解决Git“CONFLICT(修改/删除)”?

时间:2018-01-16 19:40:49

标签: git

我遇到了之前见过的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最近有一些变化,还有更多分支用于分期。

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

4 个答案:

答案 0 :(得分:4)

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

如果你想保留文件

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

如果要放弃文件

$ git rm <filename>
$ git commit

答案 1 :(得分:2)

看起来有一个文件已在本地删除,但已被远程修改:

  

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

这是因为HEAD引用了您的本地环境,而01b73是您要合并的分支的提示的SHA(通过pull)。

因此,Git不知道是删除文件还是保留文件。

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

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

答案 2 :(得分:2)

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

解决方案是:

1)删除文件(&#39; git rm ...&#39;),它会给你一个听起来不好的消息,但会在提交时正确删除该文件。

2)(我相信)添加文件(&#39; git add ...&#39;)然后提交它。

由您自行决定根据您的预期结果确定您需要的内容。

答案 3 :(得分:1)

冲突的基本定义是你触及了他们也触及的一些源线。例如,给定:

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 - 编辑了相应的最终结果。必要时解决其他冲突,然后完成合并:

git commit

或(自Git 2.12版以来):

git merge --continue