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

vic*_*vic 6 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.
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句,我们的GitHub最近进行了一些更改,并且有更多分支可供分期。

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

Jon*_*ink 7

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

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

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

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

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

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


Cod*_*ice 6

该消息表明您删除了当前分支中的文件,而其他人在您要提取的分支中对其进行了修改。您需要决定如何处理文件。

如果要保留文件

$ git checkout <filename>
$ git add <filename>
$ git commit
Run Code Online (Sandbox Code Playgroud)

如果要丢弃文件

$ git rm <filename>
$ git commit
Run Code Online (Sandbox Code Playgroud)

  • 如果我想保留该文件,`git checkout`不起作用,它显示该文件未合并 (2认同)

tor*_*rek 6

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

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

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

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

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

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

git commit
Run Code Online (Sandbox Code Playgroud)

或(自 Git 2.12 版起):

git merge --continue
Run Code Online (Sandbox Code Playgroud)


Lae*_*eom 5

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

解决方案是:

1)删除文件('git rm ...'),这会给你一个不好的消息,但在提交时会正确删除文件。

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

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