Git - 分支与合并



分支和合并是 Git(一种分布式版本控制系统)中最强大和最重要的两个功能,开发人员使用它来管理和协作项目。

什么是 Git 分支?

Git 分支是指创建一条新的开发线路,该线路与主项目分离的过程。每个分支代表一组独立的更改,可以在隔离状态下进行处理。

默认情况下,新的 Git 仓库从名为mainmaster的单个分支开始。随着开发的进行,您可以创建其他分支来处理新功能、错误修复或实验性更改,而不会影响main分支的稳定性。

假设我们负责一个软件项目,并且我们一直在向master分支(主开发分支)提交更改。

现在我们需要处理一个特定的功能或错误,例如实现一个新的身份验证模块。

git branch merge1

创建和管理分支

使用 Git,我们可以一次性创建一个新分支并切换到它来隔离这项工作,直到它准备好为止。

$ git branch auth-module
$ git checkout auth-module
git branch merge2

>-b选项可以简化此操作,无需分别创建分支然后再切换到它。

$ git checkout -b auth-module

此命令会将工作目录复制到auth-module分支并立即构建它。Git 会发送一条消息确认此修改。

Switched to a new branch 'auth-module'

现在,修改和提交只会影响auth-module分支。

例如,让我们编辑与身份验证相关的文件,并使用以下命令提交我们的修改:

$ vim auth.py
$ git commit -a -m 'Implement user authentication module'

auth-module分支将与master分支分离。

git branch merge3

使用这种方法,我们可以并行处理新功能或修复,同时保持main分支的稳定性。

假设在实时网站上报告了一个需要立即修复的错误(紧急问题解决)。

我们使用git checkout返回master分支以解决紧急问题。

$ git checkout master

Git 确保我们的工作目录反映master分支在上次提交时的状态。

Git 分支切换使我们可以专注于解决当前问题,而无需部署来自auth-module分支的不完整修改。

这种分离保证了我们在auth-module上的工作将继续保持独立和不受干扰,直到它准备好集成。

git branch merge4

在切换分支之前,必须拥有一个干净的工作目录。为了避免冲突,请确保所有与auth-module相关的修改都已提交或存储。

Git 的分支管理通过启用针对任务和紧急需求的快速上下文切换来提高工作效率,减少管理和实施更改的工作量,促进团队合作并快速解决问题。

然后,出现了一个需要我们立即关注的错误。让我们通过创建一个bugfix分支来处理这个问题。

$ git checkout -b bugfix
Switched to a new branch 'bugfix'
$ vim index.html
$ git commit -a -m 'Fix critical bug in login process'
[bugfix 1fb7853] Fix critical bug in login process
 1 file changed, 2 insertions(+)

进行测试以确保补丁在进行必要的调整后满足标准至关重要。验证后,我们通过将其合并回master来部署 bugfix 分支。

$ git checkout master
$ git merge bugfix
Updating f42c576..3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
git branch merge5

在此合并过程中,我们看到了快速前进通知。这是因为bugfix分支基于master提交 C2 之前的状态。

Git 只需将master分支的引用向前推进以包含 bugfix 修改。

git branch merge6

现在更改已添加到master分支,我们可以继续进行解决方案的部署。

成功部署主要错误补丁后,我们可以安全地从我们的存储库中删除不再需要的 bugfix 分支,从而保持其井然有序。

$ git branch -d bugfix
Deleted branch bugfix (3a0874c).

现在,我们可以返回我们的auth-module分支并在该分支中继续工作。

$ git checkout auth-module
Switched to branch 'auth-module'
$ vim auth.py
$ git commit -a -m 'Finish implementing user authentication module'
[auth-module ad82d7a] Finish implementing user authentication module
1 file changed, 1 insertion(+)
  • 必须理解,auth-module分支并不总是立即包含在 bugfix 分支中所做的修改。

  • 如果需要,我们可以使用 git merge master将这些修改包含到auth-module中。

  • 或者,我们可以等到准备好将auth-module集成到 master 中。

基本合并

当我们完成auth-module分支的工作并准备好将其集成到master时,我们开始合并过程。

$ git checkout master
Switched to branch 'master'
$ git merge auth-module
Merge made by the 'recursive' strategy.
auth.py |    1 +
1 file changed, 1 insertion(+)

此合并与之前的 bugfix 合并不同。

git branch merge7

在本例中,我们的开发历史有所不同。

Git 在三方合并中组合来自masterauth-module及其共同祖先的更改。

git branch merge8

Git 自动创建一个新的快照作为此合并的结果,并生成一个合并提交,该提交引用两个父分支,而不是仅仅向前推进分支指针。

由于它合并了不同的历史记录,因此此合并提交是唯一的。

现在auth-module的修改已集成到 master 中,我们可以删除分支并在我们的跟踪系统中关闭相关问题。

$ git branch -d auth-module
Deleted branch auth-module (3a0874c).

通过确保已完成的功能合并到 master 开发分支,此过程可以维护项目的完整性和进展。

广告