专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Git合并和合并冲突

Git合并和合并冲突

更新时间:2021-12-23 10:42:05 来源:赢咖4 浏览1760次

Git 中,合并是连接分叉历史的过程。它将两个或多个发展历史连接在一起。git merge 命令可以帮助您获取 git branch 创建的数据并将它们集成到单个分支中。Git merge 会将一系列提交关联到一个统一的历史记录中。一般使用 git merge 来合并两个分支。

“git合并”命令

git merge 命令用于合并分支。

git merge 命令的语法如下:

$ git merge  <查询>

它可以在各种上下文中使用。一些如下:

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

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

$ git merge  <提交>  

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

请参阅以下示例。我对我的项目文件newfile1.txt进行了一些更改,并将其提交到我的测试分支中。

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

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

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

要将指定的提交合并到 master,首先要发现它的提交 id。使用 log 命令查找特定的提交 ID。

$git log  

请参阅以下输出:

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

$ git checkout master  

现在,切换到分支“master”以对提交执行合并操作。使用 git merge 命令和 master 分支名称。其语法如下:

$ git merge master  

请参阅以下输出:

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

打开新文件,您会注意到我们提交给测试分支的新行现在被复制到主分支上。

场景 3:Git 合并分支。

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

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

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

$ git merge <branchname> 

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

Git合并冲突

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

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

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

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

现在提交更改并使用远程存储库更新它。请参阅以下输出:

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

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

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

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

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

在给定的输出中, git rebase 命令用于从远程 URL 中拉取存储库。在这里,它会在 中显示类似合并冲突的错误消息。

解决冲突:

要解决冲突,需要知道冲突是否发生以及发生的原因。Git合并工具命令用于解决冲突。合并命令的使用如下:

$ git mergetool  

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

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

$ git rebase --continue  

因此,冲突已经解决。请参阅以下输出:

在上面的输出中,冲突已经解决,本地存储库与远程存储库同步。如果大家想了解更多相关知识,可以关注一下赢咖4的Java赢咖4在线学习,里面的课程内容全面,从入门到精通,适合零基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>