我遇到了以前见过的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最近有一些变化,有更多的分支用于分期。
更新:感谢大家的投入。现在我知道如何处理这个问题了。
5条答案
按热度按时间1l5u6lss1#
该消息指出,您删除了当前分支中的一个文件,而其他人在您正在拉取的分支中修改了该文件。您需要决定如何处理该文件。
如果您要保留文件
字符串
如果要放弃该文件
型
如果文件已移动,则需要将更改复制到新位置。
nfzehxib2#
看起来有一个文件,你已经在本地删除,但被远程修改:
冲突(修改/删除):在HEAD中删除,在01 b734 b 9ae 8594 f03 f5 e481 b123 d80 e41 fb 54 d 7 c中修改。
这是因为
HEAD
引用的是您的本地环境,而01b73
是您正在合并的分支的尖端的SHA(通过pull
)。所以,Git不知道是删除文件还是保留它。
您应该首先验证是否要保留该文件。这将是暂存文件(如果您想保留它)(
add
)或删除文件(rm
)。最后,创建一个
commit
来解决冲突。4bbkushb3#
冲突的基本定义是,您接触了一些源代码行,而他们也接触了这些源代码行。例如,给定:
字符串
Git应该保留哪一行,应该丢弃哪一行,还是应该有第三个结果?Git 不知道,所以它把任务留给你。
在本例中,您的(“HEAD”)更改是通过删除整个文件来删除 * 每 * 行。他们的更改是修改文件的某些行。Git不知道该怎么做:它应该像你一样删除整个文件吗是否应该保留其修改版本?或者,也许还有第三种方法来解决这个问题。
一般来说,再次删除所有内容比重建它们的版本要容易(尽管这两种方式都不是很难),所以Git将它们的版本留在工作树中。如果这是正确的答案,你可以简单地
git add
这个文件来告诉Git:* 使用该版本 * 如果完全删除文件是正确的答案,那么git rm
文件告诉Git:* 完全删除文件 。如果有第三个正确答案,根据需要编辑文件以放入正确的内容,然后git add
文件以告诉Git: 使用该版本 *无论如何,现在已经解决了这个特定文件的冲突(一旦您对适当的最终结果执行了
git add
-ed或git rm
-ed)。如有必要,解决其他冲突,然后完成合并:型
或者(自Git 2.12版本起):
型
5f0d552i4#
我相信这种情况会出现在合并树的一方删除了文件,而另一方修改了它。
解决办法是:
1)删除文件('git rm ...'),这会给予你一个不好听的消息,但在提交时会正确删除文件。
2)(我相信)添加文件('git add ...')然后提交它。
这取决于你决定你需要基于你想要的结果。
7kjnsjlb5#
如果在合并两个分支时出现修改/删除冲突,这意味着
BRANCH_DELETED
中,文件被删除。BRANCH_MODIFIED
中,文件被修改。这里的大多数答案只是解释了这在技术上意味着什么,以及运行什么命令来保留或删除文件,甚至还有一个解释了一些底层的GIT实现细节。另一个解释了什么是一般的冲突,我认为这太宽泛了,不切实际。本文试图给予一个切实而完整的答案。
如果文件被删除,可能有多种原因:
这一点很重要,因为您需要找出文件的内容是否仍然存在于
BRANCH_DELETED
中的某个位置以及它们现在的位置,这样您就可以找出在BRANCH_MODIFIED
中所做的更改是否仍然相关,如果是,它们需要去哪里。即使这些更改不能真正应用于仍然存在的任何内容,您也可能必须在某个地方进行一些具有相同或类似效果的其他更改。这可能需要理解你正在合并的代码及其历史,甚至可能需要与其他人交谈,所以你需要跳出GIT命令,GIT哈希和合并的框框(就像大多数冲突一样)。没有GIT命令可以为您执行此操作。要做出明智的决定,您可能还需要查看在分支
BRANCH_MODIFIED
中所做的修改。您可以使用以下命令之一执行此操作:字符串
(See https://stackoverflow.com/a/44956845/2279059了解详情)
然后,您可以做出技术决定,是删除还是保留(已修改的)文件。您可以使用来自https://stackoverflow.com/a/48288738/2279059的命令或运行
型
并在提示时选择保留修改的文件或删除它。如果你删除了它,也不用担心,你仍然可以看到上面描述的其他分支中的修改。
根据文件被删除的原因以及其内容发生了什么,您现在需要执行以下操作的一些组合.
BRANCH_MODIFIED
中所做的修改,从而解决了冲突。很抱歉,这对很多人来说是显而易见的,但人们普遍误解冲突是一个技术问题,可以通过运行正确的GIT命令来解决,相信这一点和在StackOverflow上搜索解决方案之间可能存在相关性。