情景说明

在项目开发的过程中,项目已经有了 master 和 dev 两个分支。现在你要添加一个聊天(chat)的功能到项目中去,所以你将在 dev 分支上创建一个新的名为 chat 的分支。当你完成了 chat 分支的开发,准备将其合并到 dev 分支的时候,却发现 dev 分支相对于你创建 chat 分支时有了新的变动。这个时候 chat 分支需要 merge dev 分支的变动,保证自己分支的代码维持最新的代码状态,同时也能避免提交到 dev 分支时的代码冲突。

merge 命令简介

git merge 命令用于合并指定分支到当前分支。

创建并开发 chat 分支

创建 chat 分支

checkout -b

git checkout 命令加上 -b 的参数,表示创建并切换,相当于以下两条命令

开发 chat 分支

在 chat 分支完成了 chat 功能的开发,并进行了提交。

dev 分支发生变动

当你完成了 chat 分支的开发,dev 分支也发生了变化,因为有人向其中添加了 video 的功能。但是 chat 分支是在添加 video 功能之前就已经创建的。所以在我们将 chat 分支合并到 dev 分支之前,先 merge dev 分支,保证 chat 分支和 dev 分支之间只有你改动的 chat 功能不同。

再看一下当前情况下两个分支的文件结构的不同。

chat 分支

chat branch 文件结构

dev 分支

dev branch 文件结构

merge dev 分支

merge 命令行

此时,再看一下 chat 分支,发现 chat 分支中也已经有了 dev 中的 VideoController,也就是说,chat 分支除了多了一个 ChatController,其他部分已经和 dev 分支完全一样了。

完成 merge 后的dev分支

将 chat 分支合并到 dev

切换到 dev 分支,将 chat 分支的工作成果合并到 dev 分支。

至此,已经完成向 dev 分支的合并,dev 分支既有 chat 功能也有 video 的功能。

附录:rebase 命令

除了使用 git merge 命令可以进行分支合并, git rebase 命令也可以进行分支合并。从项目代码的角度来看,这两个命令最终产生的项目是完全一样的。但两者的区别主要在于完成合并的流程不同。

  • git merge 命令是在你完成了 chat 功能的提交之后,直接与 dev 分支进行合并。
  • git rebase 命令会将 chat 分支中的所有提交(commit)取消掉,并且把它们临时保存为补丁(patch),然后将 chat 分支更新为最新的 dev 分支后,再把这些保存的补丁应用到 chat 分支中,最终完成了合并。

发表评论

电子邮件地址不会被公开。 必填项已用*标注