前面章节讲了 分支,提到一种常用的工作流:将默认分支(master)设置为主分支,保存最新的、随时可以发布的版本,所有的新特性、BUG都在另一个称为特性分支上增加或修改,然后在一个合适点,将特性分支内容 合并 到主分支。本节,讲述如何用 TortoiseGit 合并分支。

开发工作一般是在分支上进行的,当达到一定阶段,需要将更改合并到另一分支。比如常见的一种情况是:master 分支用于保存稳定版本,从 master 分支创建 develop 分支用于平时的开发分支,当 develop 功能告一段落后,需要将它合并到master 分支上。

需要注意的是,合并始终发生在工作区中,因此如果要将 develop 分支的更改合并到 master 分支上,首先要做的是切换到 master 分支上,然后,使用右键菜单TortoiseGitMerge…,打开合并对话框:

在这里插入图片描述

如果被合并的工作区有已修改的文件,则需要先提交这些修改。

可以选择想要合并的提交:

  • Branch:所选分支的最后一个提交
  • Tag:所选标签的提交
  • Commit:任意提交,你需要单击...启动提交日志对话框,然后选择需要的提交。也可以直接输入提交的哈希码或者提交名(比如HEAD~4)

还有一些可选项:

  • squash:合并时将更改的多个提交(commit)压缩成一个提交,这样在提交日志中只能看到一条提交。使用该选项合并后不会自动提交,需要手动做一次提交(commit)。不自动提交提供了一个审视合并结果的机会。

在这里插入图片描述

使用 squash 选项会丢失掉历史提交,所以需要慎重。只有确保被压缩的提交没有实际意义时才可以使用 squash 选项。

使用 squash 选项合并分支后,应将该分支删除掉,比如将 feature 分支合并到 develop 分支,选 squash 选项,Git 会将把 feature 分支上更改的提交压缩成一个提交然后合并到 develop 分支。合并结束后,应将 feature 分支删除掉,否则,如果再在 feature 分支上更改,然后再合并到 develop 分支,则 feature 分支上所有的更改提交都会合并倒 develop 分支,包括我们之前特意压缩的那些提交!

  • No Commit:合并后不自动提交,也要手动做一次提交。不自动提交提供了一个审视合并结果的机会。

在这里插入图片描述

  • No Fast Forward:即使合并是快速合并(fast-forward),也会强制生成一个合并提交(一般提交信息为Merge branch ‘分支名’)。在查看提交日志中,可以看到分支的图谱信息。如果要保留历史分支信息,建议勾选此选项。

    正常 合并、使用 No Fast Forward 选项合并、使用 Squash 选项合并区别:

总结一下合并的步骤:

假设将分支 develop合并到 master分支,不使用压缩提交选项 squash,合并的步骤:

  1. 使用右键菜单 TortoiseGitSwitch/Checkout…,切换到 master 分支;
  2. 使用右键菜单 TortoiseGitMerge…,选择 develop 分支,点击 OK 按钮;

假设将分支 develop 合并到 master 分支,使用压缩提交选项 squash,合并的步骤:

  1. 使用右键菜单 TortoiseGitSwitch/Checkout…,切换到 master 分支;
  2. 使用右键菜单 TortoiseGitMerge…,选择 develop 分支,勾选 squash 选项点击 OK 按钮;
  3. 弹出提交对话框,填写提交信息,点击 commit 按钮,完成合并。

注意合并可能引起冲突,详见《TortoiseGit 入门指南06:解决冲突》部分。

从 master 分支创建出 develop 分支,然后一直在 develop 分支上做新功能开发,master 分支保持不动。等到 develop 分支测试完毕后,合并到 master 分支上,这种情况下,master 分支不会出现分叉









读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐