Git 合并和合并冲突

Git 合并和合并冲突

在Git中,合并是将分叉的历史连接在一起的过 程。它将两个或更多的开发历史连接在一起。git merge命令使您能够将由git branch创建的数据集成到一个单一的分支中。Git合并将一系列提交关联到一个统一的历史上。通常,git merge用于合并两个分支。

Git 合并和合并冲突

它被用来维护不同的开发分支;在某个阶段,你想要合并一个分支中的变更。了解Git中的合并如何工作非常重要。

在上图中,有两个分支 masterfeature 。我们可以看到我们在功能和master分支上做了一些提交,并将它们合并。它的工作方式就像一个指针,它会找到分支之间的共同基础提交。一旦Git找到了共享的基础提交,它将创建一个新的”合并提交”,它将合并每个队列中的合并提交序列的变更。

“git merge”命令

git merge命令用于合并分支。

git merge命令的语法如下:

$ git merge <query>

它可以应用于各种情境。以下是一些例子:

场景1:将指定的提交合并到当前活跃的分支:

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

$ git merge <commit>

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

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

Git 合并和合并冲突

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

Git 合并和合并冲突

场景2:将提交合并到主分支中:

要将指定的提交合并到主分支中,首先要找到它的提交ID。可以使用日志命令来找到特定的提交ID。

$git log

查看下面的输出:

Git 合并和合并冲突

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

$ git checkout master

现在,切换到’master’分支上执行合并操作。使用git merge命令以及’master’分支名称。其语法如下:

$ git merge master

查看下面的输出:

Git 合并和合并冲突

在给定的输出中,我在测试分支上对newfile1进行了更改。现在,我已经在测试分支上提交了这个更改。

Git 合并和合并冲突

现在,切换到您想要合并的目标分支。在给定的示例中,我已经切换到主分支。执行下面的命令,将整个分支合并到活动分支中。

$ git merge <branchname>

Git 合并和合并冲突

正如您从给定的输出中可以看到的,分支test2的所有提交已合并到分支master。

Git合并冲突

当两个分支尝试合并且同时编辑同一个文件时,Git无法识别应采用哪个版本的更改。这种情况被称为合并冲突。如果出现这种情况,Git会在合并提交之前停止,以便您可以手动解决冲突。

Git 合并和合并冲突

通过一个例子来理解。

假设我的远程仓库被我的两个团队成员 user1user2 克隆了。用户1在我的项目索引文件中进行了如下更改:

Git 合并和合并冲突

使用git add命令将其更新到本地仓库中。

Git 合并和合并冲突

现在提交更改并将其更新到远程仓库。请参阅以下输出:

Git 合并和合并冲突

现在,我的远程仓库将会是这样的:

Git 合并和合并冲突

它将显示文件的编辑状态,包括由谁何时编辑。

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

Git 合并和合并冲突

用户2已经添加并提交了本地仓库中的更改。但是当他尝试将其推送到远程服务器时,会抛出错误。请参见下面的输出:

Git 合并和合并冲突

在上述输出中,服务器知道该文件已经更新,而且没有与其他分支合并。所以,推送请求被远程服务器拒绝了。它会抛出一个错误消息,类似于 **[rejected] failed to push some refs to ** 。它会建议你在推送之前先拉取存储库。请参考下面的命令:

Git 合并和合并冲突

在给定的输出中,git rebase命令被用来从远程URL拉取仓库。在这里,它将显示如下的错误信息: 合并冲突在 <filename>

解决冲突

为了解决冲突,有必要知道冲突是否发生以及为什么它发生。Git合并工具命令被用于解决冲突。合并命令的使用方式如下:

$ git mergetool

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

Git 合并和合并冲突

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

$ git rebase --continue

因此,冲突已经解决。请看下面的输出:

Git 合并和合并冲突

在上述输出中,冲突已解决,本地仓库与远程仓库同步。

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

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程