需要帮助来理解合并冲突的例子

时间:2014-06-08 06:09:35

标签: git merge

我正在关注一本书中的示例,该书没有显示解决合并冲突的步骤。本教程中提到的本教程对我不起作用 - Simulate multiple users/committer's on local system 所以,我甚至无法学习合并。

以下是从书中复制的步骤 -

现在打开空白participants.txt文件并在其中粘贴以下行: (我在每个名字之前加了一个连字符

Finance team
 Charles
 Lisa
 John
 Stacy
 Alexander

Git代码 -

git init
git add .
git commit –m 'Initial list for finance team'

使用以下语法创建一个名为marketing的新分支:

git checkout –b marketing

现在打开participants.txt文件并开始输入财务团队列表下方营销部门的名称,如下所示: (我在每个名字之前加了一个连字符

Marketing team
 Collins
 Linda
 Patricia
 Morgan

Git代码 -

git add .
git commit –m 'Unfinished list of marketing team'
git checkout master

打开文件并删除名称Alexander和Stacy,保存,关闭,添加更改和提交 使用提交消息来自财务团队的最终列表。

git add .
git commit –m "Final list from Finance team"
git checkout marketing

打开文件并为营销团队添加第五个名称Amanda,保存,添加和提交。

git add .
git commit –m "Initial list of marketing team"

说已经确认输入用于营销的相同名称;现在我们需要合并这两个列表,这可以通过以下命令完成。

git merge master

您将收到合并冲突,如以下屏幕截图所示。解决它们。

Auto-merging participants.txt
CONFLICT (content): Merge conflict in participants.txt
Automatic merge failed; fix conflicts and then commit the result.

如何解决这些冲突?

文件中的文字如下 -

Finance team
-Charles
-Lisa
-John
<<<<<<< HEAD
-Stacy
-Alexander

Marketing team
- Collins
- Linda
- Patricia
- Morgan
- Amanda
=======
>>>>>>> master

1 个答案:

答案 0 :(得分:8)

这些是合并标记:

<<<<<<<
Changes made on the branch that is being merged into. In most cases,
this is the branch that I have currently checked out (i.e. HEAD).
|||||||
The common ancestor version.
=======
Changes made on the branch that is being merged in. This is often a 
feature/topic branch.
>>>>>>>

如&#34; Fix merge conflicts in Git?&#34;中所述,您应该:

  • 删除它们
  • 保留您希望在文件的最终版本中看到的行
  • 添加并提交

或者您只需查看这些文件即可保留原始版本,例如&#34; How can I discard remote changes and mark a file as “resolved”?&#34;。

如您所见,您从Finance Team分支marketingStacy中的Alexander删除的名称又回来了。
因此,当您将master合并到marketing时,git会问您:我们应该保留这些名称还是删除它们?


Charles Bailey添加in the comments时,似乎缺少(基本)共同祖先部分:

|||||||
The common ancestor version.
=======

你应该使用配置重做练习:

git config merge.conflictStyle  diff3

这将有助于可视化3-way merging的基本部分 另请参阅&#34; Why is a 3-way merge advantageous over a 2-way merge?&#34;。


OP adds

  

确定要在文本文件中保留的内容并删除合并标记<<<HEAD>>>master后,需要将文件添加到具有git add [filename]的阶段,然后提交为正常的。
  您不能马上执行git merge master

再次合并时,OP会报告错误消息:

error: 'merge' is not possible because you have unmerged files. 
hint: Fix them up in the work tree, 
hint: and then use 'git add/rm <file>' as 
hint: appropriate to mark resolution and make a commit, 
hint: or use 'git commit -a'. 

fatal: Exiting because of an unresolved conflict.
  

这是解决方案

git add .
git commit - m "success"
git merge master

请参阅&#34; GIT merge error “commit is not possible because you have unmerged files”&#34;。