简介
我们在上一篇中提到,对于不同的开发者要对同一个专案进行开发时,可以使用git branch
建立一个新的分支,这样可以在不影响其他分支的情况下,多人同时地对专案进行开发,而在不同分支上面进行开发后,最终还是需要将所有分支的开发内容合併到master当中,所以本篇记录了如何将多个分支合併。
合併分支 - fast forward
利用git merge
可以将指定的分支合併起来。
Step 1 : 将HEAD移动到主要分支的commit上
利用git merge合併分支是将指定的分支合併到HEAD目前所在的位置
上,所以我们为了将issue合併到master中,所以第一步我们需要将HEAD利用git checkout master
移动到master的commit上。
Step 2 : git merge 分支名称 -> 将指定的分支合併到目前HEAD所指向的位置
当在issue分支上进行开发完成并且确认没问题后,可以使用git merge issue
将分支内容合併到master当中。
可以在master里面的index.html中看到,属于issue分支里面的<h2>在issue分支中进行修改</h2>
也出现在了master里的index.html中,代表着master与issue的专案内容合併了。
合併分支 - 自动合併
随然上面有提到合併分支,但是有时候一个专案可能不只一个开发者,在你在分支上开发新功能的时候,可能有其他开发者已经更新了master上面的commit。
Step 1 : 新增一个issue分支并该改index.html内容以产生issue的commit节点
在issue的index.html中新增了<link rel="stylesheet" href="css/all.css">
并且将它commit。
Step 2 : 回到master中也更改index.html并且commit产生新的节点
先在master的index.html中新增一行程式码<h1>Master</h1>
,并将他commit产生一个新的节点。
Step 3 : 将两个分支利用git merge合併
在将两个分支进行合併后,会产生一个文件,上面写着它已经将issue合併到master当中,如果没有问题的话就可以将此文件关闭。
关闭后会Git Bash上便会显示合併完成。
在master的index.html中也会出现<link rel="stylesheet" href="css/all.css">
而此时的branch会变成下图
合併分支 - 解决合併冲突
在进行档案合併的时候,若两个不同的分支对于同一个档案同一个部份进行更改,会发生merge冲突,因为git无法得知要保留哪一个分支的内容,所以必须手动选择需要保留的内容再手动merge。
修改issue中的index.html
再issue的index.html中新增一行程式<h1>issue</h1>
修改master中的index.html
再master的index.html中,相同位置下新增<h1>Master</h1>
合併分支
当合併分支后会发现index.html中与先前不一样,这代表两个要合併的分支都更改到了同一个部分的资料而git并不知道哪一个要留下,所以需要手动删除其中一个或是两个都保留下来,下面选择将两行程式码都保留下来,
选择好要保留的程式码后再手动将新的index.html commit上去,这样就是手动的将两个分支合併起来
再次回到issue的index.html发现依然保持着只有一行<h1>issue</h1>
的状态,表示合併资料不会影响到issue分支
参考资料 :
掌握 Git 与 Github 程式时光机