Git - Merge & Conflict

Git - Merge & Conflict 首页 / Git入门教程 / Git - Merge & Conflict

在Git中,合并(Merge)是连接分支历史的过程。它把两个或多个开发历史联系在一起。 git merge命令可帮助您获取git分支创建的数据并将其集成到单个分支中。 Git合并会将一系列提交关联到一个统一的历史记录中。通常,git merge用于合并两个分支。

Git Merge and Merge Conflict


在上图中,有两个分支 master features 。我们可以看到我们在功能和master分支中都进行了一些提交,并将它们合并。它用作指针。它将在分支之间找到一个共同的基础提交。一旦Git找到一个共享的基本提交,它将创建一个新的"合并提交"。它合并了每个排队的合并提交序列的更改。

git merge 命令

git merge命令用于合并分支,语法如下:

$ git merge <query>

它可以在各种情况下使用。一些如下:

方案1:将指定的提交合并到当前活动的分支中:

使用以下命令将指定的提交合并到当前活动的分支中。

$ git merge <commit>

上面的命令会将指定的提交合并到当前活动的分支中。您还可以通过在<commit>中传入分支名称来将指定的提交合并到指定的分支。让我们看看如何提交到当前活动的分支。

请参见以下示例。我已经在项目的文件 newfile1.txt 中进行了一些更改,并将其提交到我的 test 分支中。

Git Merge and Merge Conflict

将要合并的特定提交复制到活动分支上,然后执行合并操作。请参见以下输出:

Git Merge and Merge Conflict

在上面的输出中,我们将先前的提交合并到活动分支test2中。

方案2:要将提交合并到master分支中:

要将指定的提交合并到主提交中,请首先发现其提交ID。使用log命令查找特定的提交ID。

$git log

请参见以下输出:

Git Merge and Merge Conflict

要将提交合并到master分支中,请切换到master分支。

$ git checkout master

现在,切换到分支" master"对提交执行合并操作。将git merge命令与主分支名称一起使用。语法如下:

$ git merge master

请参见以下输出:

Git Merge and Merge Conflict

如上面的输出所示,提交ID为 2852e020909dfe705707695fd6d715cd723f9540 的提交已合并到master分支中。 master分支中有两个文件已更改。但是,我们已在 test 分支中进行了此提交。因此,可以合并任何分支中的任何提交。

打开新文件,您会注意到我们已经提交给test分支的新行现在已复制到master分支上。

方案3:Git合并分支。

Git允许将整个分支合并到另一个分支中。假设您在分支上进行了许多更改,并且希望一次合并所有这些。 Git允许您这样做。请参见以下示例:

Git Merge and Merge Conflict

在给定的输出中,我在测试分支的newfile1中进行了更改。现在,我已在测试分支中进行了此更改。

Git Merge and Merge Conflict

现在,切换到要合并的所需分支。在给定的示例中,我已切换到master分支。执行以下命令,将整个分支合并到活动分支中。

$ git merge <branchname>
Git Merge and Merge Conflict

从给定的输出中可以看到,分支test2的整个提交已合并到分支master。

链接:https://www.learnfk.comhttps://www.learnfk.com/git/git-merge-and-merge-conflict.html

来源:LearnFk无涯教程网

Git合并冲突

当两个分支试图合并,并且同时在同一文件中对其进行编辑时,Git将无法识别要更改的版本。这种情况称为合并冲突。如果发生这种情况,它将在合并提交之前停止,以便您可以手动解决冲突。

Git Merge and Merge Conflict

让我们通过一个例子来理解它。

假设我的团队成员 user1 user2 中的两个克隆了我的远程存储库。 user1在我的项目索引文件中进行了如下更改。

Git Merge and Merge Conflict

借助git add命令在本地存储库中更新它。

Git Merge and Merge Conflict

现在提交更改,并使用远程存储库进行更新. 请参见以下输出:

Git Merge and Merge Conflict

现在,我的远程存储库将如下所示:

Git Merge and Merge Conflict

它将显示文件的状态,如由谁以及何时编辑。

现在, user2 同时也按如下方式更新索引文件。

Git Merge and Merge Conflict

User2已添加并提交了本地存储库中的更改。但是,当他尝试将其推送到远程服务器时,它将引发错误。请参见以下输出:

Git Merge and Merge Conflict在上面的输出中,服务器知道该文件已经更新并且未与其他分支合并。因此,推送请求被远程服务器拒绝。它将抛出错误消息,例如[rejected]无法将某些引用推送到<remote URL>。建议您在推送之前先拉出存储库。请参阅以下命令:
Git Merge and Merge Conflict

在给定的输出中,git rebase命令用于从远程URL提取存储库。在这里,它将在<filename>中显示诸如合并冲突之类的错误消息。

解决冲突:

为了解决冲突,有必要知道冲突是否发生以及为什么发生。 Git merge工具命令用于解决冲突。 merge命令的用法如下:

$ git mergetool

在我的存储库中,它将导致:

无涯教程网

Git Merge and Merge Conflict

上面的输出显示了冲突文件的状态。要解决冲突,只需按 I键进入插入模式,然后根据需要进行更改。按 Esc键,退出插入模式。在编辑器底部键入: w!以保存并退出更改。要接受更改,请使用rebase命令。它的用法如下:

$ git rebase --continue

因此,冲突解决了。请参见以下输出:

Git Merge and Merge Conflict

在以上输出中,冲突已解决,并且本地存储库与远程存储库同步。

要查看文件中合并冲突的第一个编辑文本,请搜索带有冲突标记<<<<<<<的文件。您可以在文本编辑器的<<<<<<< HEAD行之后的HEAD或基本分支中看到更改。接下来,您可以看到=======的分隔线。它将您的更改与另一个分支中的更改分开,后跟>>>>>>> BRANCH-NAME。在上面的示例中,user1在base或HEAD分支中写了“ <h1> Git是版本控制</ h1>”,而user2在写了“ <h2> Git是版本控制</ h2>”。

确定是只保留分支的更改还是保留其他分支的更改,还是创建新的更改。删除冲突标记<<<<<<<,=======,>>>>>>>并创建要合并的最终更改。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

MySQL实战45讲 -〔林晓斌〕

罗剑锋的C++实战笔记 -〔罗剑锋〕

技术面试官识人手册 -〔熊燚(四火)〕

如何成为学习高手 -〔高冷冷〕

手把手带你写一门编程语言 -〔宫文学〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

大厂设计进阶实战课 -〔小乔〕

手把手带你写一个MiniSpring -〔郭屹〕

超级访谈:对话道哥 -〔吴翰清(道哥)〕

好记忆不如烂笔头。留下您的足迹吧 :)