準备工作
强烈建议使用Git GUI工具来观察分支,有助于釐清目前专案的版控情况。
下载TortoiseGit,安装很简单,就不多说明了。
安装完毕,打开软体,在左下角勾选All Branches,才能显示所有分支的情况。
观察分支
延续Git-了解分支&分支(建立、切换、删除、回复)。
显示master与feature分支。
initial commit是所有分支的共同commit,再以此分出去。
master分支
feature分支
合併前注意
合併分支之前,有两点要先考量:
先确定主要分支,再合併其他分支。合併之后,可能发生的冲突。假设我们以master为主要分支,去合併feature分支。
重点注意,合併之后,会修改master分支的commit,而feature分支不受影响。
换句话说,master分支会套用feature分支所有的更新。
补充说明
master分支与feature分支,在git中都只是分支,没有谁是主要分支的问题。
这只是一般开发习惯,会将master视为主要分支。
所以,我们也可以反过来,将master併入feature之中。
只是很少这样做。
开始合併
设定master为主要分支,合併feature分支。重点注意,必须要在master分支执行。合併指令 git merge [分支名称]执行后,会跳出Vim文字编辑器,只要输入:q
按下ENTER,就可以储存讯息离开。
关于Vim的操作,请自行Google。
显示log小技巧
可以输入 git log --oneline
表示只要简短的commit历程,画面会清爽许多。
成功合併后,master分支会多一个合併的commit,讯息显示 Merge branch 'feature'
同时也看到一个来自feature的commit,Id等同于feature的commit。
合併后的线图。
feature分支被併入master分支,并且产生一个合併的commit(Merge branch 'feature')。
目前位于master分支,查看工作资料夹,src资料夹消失了。
所以master分支确实有套用feature分支的commit状态。
切换到feature分支,它的commit历程不受影响。
feature分支线图,完全对应Git Bash的commit历程。
tslint.json又出现了,因为feature分支并没有删除tslint.json。
这次的合併,feature确实没有受到影响。
将feature合併到master之后,我们还是可以在feature分支继续开发,不会影响master。
在feature新增档案,写入内容。
commit
线图显示,feature分支的版本领先master分支。
新手容易犯的错
有的新手看到feature分支有新版本,便会把master分支给合併到feature分支。
结果线图变这样。
是不是觉得线图有点乱了?
这边犯的错就是,一开始是master分支合併feature分支,
接下来,feature分支又合併master分支,
这样互相合併的结果,导致线图的混乱。
正确合併的观念
先确定主要分支,之后其他分支有任何变更,一律由主要分支去合併。
从头到尾都是单方向进行,由主要分支去合併,而不是反过来合併主要分支。
回复到合併前的状态
指令 git reset --hard ORIG_HEAD
回复线图。
执行正确合併
切换到master,再合併feature。
线图变得明了许多。
删除分支,继续开发
此时master分支已经是最新版本了,feature分支可以选择删除,再从master分支另开分支继续开发。
由于feature分支已经commit了,所以-d可以顺利删除。
目前只剩master分支。
以上就是分支合併必须注意的事项。
本文为观看网路教学的学习笔记。