如何使用Git合并合并分支

如果您正在使用Git进行源代码管理,您可能需要将一个项目的不同开发分支合并到单个分支中。本文将指导您如何使用Git merge命令合并两个开发分支。

我们将向您展示如何创建一个Git项目,创建不同的分支,并将一个分支合并到另一个分支。此外,您还将了解什么是快进式合并和三方合并,以及如何将一个分支合并到远程存储库。

广告

什么是Git merge?

Git是一款流行的DevOps工具,开发人员可以使用它跟踪和管理由不同团队编写的代码的更改。通过Git merge命令,您可以将当前的开发分支(您已从主分支派生)并入其代码更改到主分支中。

Git merge是在团队合作时最常用的命令。有时您和另一个开发人员可能会在两个单独的分支上共同开发一个功能。不过,当合并时间到来时,您将需要将您的工作合并到一个分支中,测试这些更改,然后将您的协作开发合并到主开发分支中。

由于主开发分支正在更新,您和其他开发人员正在进行的单独功能分支不会随团队的更改而更新。因此,实践中,当提出拉取请求时,您应始终从最新更改开始更新本地的主分支版本。然后,在提交并提出拉取请求将其合并到主开发分支之前,您可以将更新后的主分支合并到开发分支中。

如何使用Git合并两个分支

作为开发人员,熟练掌握Git可以帮助您更有效率。首先,了解如何从命令行执行Git命令是至关重要的。在开始之前,让我们看看在开始合并不同Git分支之前,您需要首先设置什么。

广告

先决要求

要开始,您需要以下物品:

让我们快速了解在Windows PC上安装Git所需的不同步骤(我们还有关于如何在Ubuntu上安装Git的单独指南):

  • 跟随链接下载适用于您的计算机的Git并安装文件。
  • 安装完成后,打开您的终端并输入git –version:
git –version

如果返回版本号,则很好!但是,如果收到“命令未找到”消息,则可能需要将Git添加到您的$PATH变量中。这通常是Windows的问题。

让我们迅速解决这个问题,这样您就不必继续搜索了。

广告

  • 转至“开始”菜单,右键单击此电脑
  • 选择属性
  • 点击高级系统设置
  • 在系统属性下,点击环境变量。在这里,您可以向$PATH变量添加值。
  • 选择$PATH并点击编辑
  • 点击新建,然后添加git/cmd路径。
  • 点击新建,然后添加git.exe文件的路径。

保存更改,返回终端,再次运行git -version命令。

git -version

现在应该会得到返回的版本号。在做好准备工作并设置好你的GitHub或Gitlab账户后,你应该可以开始正常运行了。

创建Git项目

在本部分,我将带你完成创建新存储库所需的不同步骤。

在你新创建的Github账户上,点击屏幕左侧的新建

接下来,你需要给你的存储库命名并填写一些其他细节。如果想的话,给它一个简短描述,将其设置为公共,并最好总是添加一个ReadMe文件。完成后,点击创建存储库

现在,要开始在你的代码编辑器中工作,你需要通过点击克隆按钮来克隆你的新存储库。选择HTTPS,复制该地址,然后打开你的终端。

在终端中,使用cd命令选择要为你的项目创建新目录的位置。

cd user/desktop/repo/

当您位于正确的分支时,请使用mkdir命令来创建一个新目录:

mkdir <name of your directory>

现在,让我们再次使用cd命令切换到新创建的目录:

 cd <name of your newly created directory> 

进入新目录后,使用git init命令来创建一个新的仓库:

git init

接下来,使用正确的HTTPS地址和git clone命令,然后按Enter键。默认情况下,这将在您的本地库中创建一个主分支。

git clone <paste https address here>

现在,用Visual Studio Code打开您新克隆的仓库。现在您可以开始编写代码了。

创建完仓库后,您将已经位于主分支上。作为最佳实践,您绝对不应该直接推送代码到主分支,因为主分支需要受到保护。

为了本教程的目的,我们不会讨论受保护的Git分支。但在实际操作中,你永远无法直接将代码推送到主分支而不经过拉取请求。

创建另一个Git分支

我们目前在主分支上,你已经编写了一些内容,请现在创建一个新分支。

在你的终端中,使用git checkout命令来创建一个新分支并自动切换到该分支:

git checkout -b <name of new branch>

该命令应该会自动从你的主分支上切出一个新分支,所以主分支的代码不应该发生变化。

现在,接下来我们将会使用git merge命令,这会很有趣。在你新创建的分支上,你首先需要添加更多的代码,这样你当前的分支会领先于主分支并带有一些新的改变。

现在你想要将这个新分支合并到主分支上,你可能会遇到合并冲突,这是新代码与已存在代码发生冲突。处理这些冲突真的很繁琐。

那你做什么呢?让我们看看如何将一个分支合并到另一个分支。

在本地代码库中合并您的两个 Git 分支

当您在新分支上时,前往终端并使用 git branch 命令来验证您当前所在的分支名称:

git branch

您现在在新分支上,请再次使用 git checkout 命令切换到主分支:

git checkout Main

接下来,使用 git pull 命令来导入团队可能已经做出的任何更改,并将本地主分支更新至最新版本:

git pull

现在,再次使用 git checkout 切换到您想要与主分支合并的新分支:

git checkout <your specified branch>

现在是时候使用 git merge 命令了。这将获取当前主分支的版本并将其合并到您的开发分支中:

git merge Main

合并结果将包含最新的代码版本以及您开发的功能。

其他合并 Git 分支的方法

在向您展示如何将新分支与主分支合并之后,让我们看看其他可能需要使用的合并 Git 分支的方法。

什么是快进合并?

A fast-forward merge is another way to merge multiple commits on one branch with one command rather than merging them all manually. Another advantage of using a fast-forward merge is that it will combine the histories of multiple commits while squashing the commit history.

假设我们有一个功能分支领先于主分支数个提交。我们希望将所有这些提交合并在一起,而不必逐个手动合并它们。在这种情况下,我们将使用快进合并。

在我们的例子中,我们将首先编写一些代码,并使用git addgit commit命令向我们的分支添加一个新提交:

git add <filename>
git commit –m “added a thing”

现在,我们将再次使用相同的命令向我们的新分支添加另一个提交:

git add <filename>
git commit –m “added another thing”

接下来,我们希望将这两个提交推送到我们的远程仓库,而不必进行两次推送。为此,我们需要在git merge命令后使用 –ff

git merge --ff

这将同时将两个提交合并到一个,并使您的代码追赶主分支。

什么是3向合并?

想象一个情况,您的开发团队在两个不同的分支上创建了一些新功能。现在,您准备更新这些分支并将它们合并到主分支,以便后者准备好将代码推送到远程仓库。

为确保新功能能够正常配合工作,最好的做法是将功能分支相互合并,然后进行一些测试。3向合并将允许我们将具有共同祖先的两个不同分支合并在一起。

让我们逐步了解如何执行三路合并到目标分支所需的步骤。在下面的示例中,我们将首先创建一个新分支,在其上添加两个提交,然后使用三路合并将其与主分支合并。

首先,让我们通过使用 git checkout 命令创建一个名为 ‘new-feature’ 的新分支并自动切换到它上面。在此命令中使用 -b 将会创建一个新分支:

git checkout -b new-feature main

接下来,使用以下命令向我们的分支添加一些文件和一个新的提交:

git add <file>
git commit -m "Start a feature"

然后使用以下命令向我们的新分支添加另一个提交:

git add <file>
git commit -m "Finish a feature"

在我们向新分支添加新代码之后,你需要想象一种情况,即我们的主分支也在继续发展。我们首先使用 git checkout 命令切换回主分支:

git checkout main

接着,我们向主分支添加一个新的提交:

git add <file>
git commit -m "make some changes to Main"

现在,我们希望将之前创建的 ‘new-feature’ 分支与更新后的主分支合并。由于主分支上的工作将继续进行,我们最后将通过 git branch 命令删除 ‘new-feature’ 分支。

git merge new-feature
git branch -d new-feature 

现在,我们将我们的两个具有共同祖先的分支合并到我们的主分支中。后者现在已经准备好合并到您的远程存储库中,并进一步增强我们的软件项目,我们将看到接下来如何做到这一点。

如何将一个 Git 分支合并到远程存储库

有时候,您可能需要将一个分支合并到远程存储库中。让我们一起来看看如何完成这个步骤。

假设您写了一些新代码,用于产品负责人想要创建的一个新功能。在测试您的代码并与产品负责人审核之后,现在您已准备好将自己的辛勤工作合并到团队的远程存储库中。

如前所述,您不应直接将代码推送到主分支。您必须始终遵守我们在本指南开头详细介绍的 Git 工作流程。

在复习了 Git 过程之后,让我们开始合并您的代码。从我们上次离开的地方继续,我们现在有一个最新的分支:主分支的最新更新已经被拉取到您的本地存储库中。

您现在站在远程存储库的门口。如何到达那里呢?很简单,我们将使用更多的 git 命令。

作为最佳实践,您应该始终使用 git status 命令检查您的分支状态。这个命令将显示已添加、删除、跟踪或未跟踪的文件。

git status

您还应查看是否已添加未被跟踪的文件。在这种情况下,您需要将它们添加到跟踪并添加到提交中。

您可以使用 git add 命令添加您在开发过程中创建的所有文件。现在,如果只想添加特定文件,您可能需要逐个列出文件名。如果要添加所有文件,请使用“.”来添加所有文件。

接下来,我们将使用git commit命令提交我们在前一步骤中添加的所有文件。您需要使用 -m 标志来编写一条消息,否则您将被推送到文本编辑模式以编写消息,这不是一个流畅的过程。

对于您的消息,您可以简要说明您做了什么。例如,“创建了一个新的很酷的功能,并在菜单中添加了一个新图标以及修复了bug。”

git commit -m “<your commit message goes here>”

最后,您可以使用 git push 命令将您的分支推送到远程存储库。

git push --set-upstream origin <<your branch name>>

现在,在推送您的分支之后,您需要前往 GitHub 或您的远程存储库托管位置,找到您最近的推送,并单击 创建拉取请求

一旦单击此按钮,您将被带到一个页面,可以在那里添加审阅者和您团队的成员,他们将批准或拒绝您的合并请求。在后一种情况下,他们将能够添加评论,说明在允许您将分支合并到远程主分支之前需要修复的内容。

一旦审查完成并您的合并请求被批准,合并按钮将会可用。点击此按钮开始合并。如果合并成功,您将收到一条确认消息,证实您的新代码已经被添加。

恭喜!您已经掌握了使用git merge命令的基础!

结论

Git merge是一个强大的命令,可以让您和您的团队在不同分支上开发新功能,然后将它们合并到主代码仓库中。

您已经学会了创建分支、合并分支、向分支添加文件和提交,并且最重要的是,将这些分支推送到远程仓库。此外,您现在了解了如何进行快进合并,使用一个命令整合几个相关分支,这确实有助于使任何开发工作更加高效。

Git是一个强大的工具,可以做很多事情。您了解的命令越多,作为开发人员的技能就会变得越好。现在您已经学会了关于合并分支的所有知识,是时候开始学习其他命令了。祝您在掌握Git的过程中好运!


Source:
https://petri.com/git-merge-combine-branches/