我遇到了以前见过的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最近进行了一些更改,并且有更多分支可供分期。
更新:谢谢大家的投入。现在,我知道如何解决这个问题。
看起来有一个你在本地删除的文件,但被远程修改了:
CONFLICT(修改/删除):在 HEAD 中删除,在 01b734b9ae8594f03f5e481b123d80e41fb54d7c 中修改。
这是因为HEAD指的是您的本地环境,并且01b73是您正在合并的分支尖端的 SHA(通过pull)。
所以,Git 不知道是删除文件还是保留它。
您应该首先验证是否要保留该文件。如果您想保留add文件 ( rm)或删除文件 ( ),这将是暂存文件。
最后,创建一个commit来解决冲突。
该消息表明您删除了当前分支中的文件,而其他人在您要提取的分支中对其进行了修改。您需要决定如何处理文件。
如果要保留文件
$ 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)
冲突的基本定义是您触及了他们也触及的某些源代码行。例如,给定:
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)
我相信当合并树的一侧删除了文件而另一侧对其进行了修改时,就会出现这种情况。
解决方案是:
1)删除文件('git rm ...'),这会给你一个不好的消息,但在提交时会正确删除文件。
2)(我相信)添加文件('git add ...')然后提交。
您可以根据所需的结果来决定需要哪种。
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |