前面章节讲了 分支
,提到一种常用的工作流:将默认分支(master)设置为主分支,保存最新的、随时可以发布的版本,所有的新特性、BUG都在另一个称为特性分支上增加或修改,然后在一个合适点,将特性分支内容 合并
到主分支。本节,讲述如何用 TortoiseGit 合并分支。
开发工作一般是在分支上进行的,当达到一定阶段,需要将更改合并到另一分支。比如常见的一种情况是:master 分支用于保存稳定版本,从 master 分支创建 develop 分支用于平时的开发分支,当 develop 功能告一段落后,需要将它合并到master 分支上。
需要注意的是,合并始终发生在工作区中,因此如果要将 develop 分支的更改合并到 master 分支上,首先要做的是切换到 master 分支上,然后,使用右键菜单TortoiseGit → Merge…,打开合并对话框:
如果被合并的工作区有已修改的文件,则需要先提交这些修改。
可以选择想要合并的提交:
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
,合并的步骤:
- 使用右键菜单 TortoiseGit → Switch/Checkout…,切换到 master 分支;
- 使用右键菜单 TortoiseGit → Merge…,选择 develop 分支,点击 OK 按钮;
假设将分支 develop 合并到 master 分支,使用压缩提交选项 squash
,合并的步骤:
- 使用右键菜单 TortoiseGit → Switch/Checkout…,切换到 master 分支;
- 使用右键菜单 TortoiseGit → Merge…,选择 develop 分支,勾选
squash
选项点击 OK 按钮; - 弹出提交对话框,填写提交信息,点击 commit 按钮,完成合并。
注意合并可能引起冲突,详见《TortoiseGit 入门指南06:解决冲突》部分。
从 master 分支创建出 develop 分支,然后一直在 develop 分支上做新功能开发,master 分支保持不动。等到 develop 分支测试完毕后,合并到 master 分支上,这种情况下,master 分支不会出现分叉。
读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)