一、目的
本文将介绍git分支的操作,包括新建和删除分支、查看和切换分支、合并分支和合并冲突等内容。
本文涉及到的所有操作都是在Ubuntu14.04环境中进行的,git版本是1.9.1。
二、新建和删除分支
使用git branch name命令新建一个名为name的分支;使用git branch -d name命令删除一个名为name的分支。
git默认的分支叫做master,在实际的项目中一般还会存在一个next分支。master分支作为主干版本,接受bugfix需求;next分支用来集成测试,接受开发完毕的新特性。此外,还会存在一些topic分支,每个topic分支用来实现一个新特性,新特性开发完成后,由next分支的维护者合并到next分支中,然后topic分支就可以被删除了。
三、查看和切换分支
使用git branch命令查看所有分支,并且前面标有星号的分支代表当前分支;使用git checkout name命令切换到name分支。
git使用HEAD索引指向当前分支,例如,版本中存在master和next两个分支,使用git checkout next命令切换到next分支后,HEAD就指向了next;使用git checkout master命令切换到master分支,HEAD就指向了master。
四、合并分支
常用的分支合并命令有:git merger、git rebase和git cherry-pick。
1、git merger
git merger按照时间顺序,将各个分支上的commit逐步合入,得到一个新的commit。
例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。
master使用git merger next将next分支的C4和C6合入到master中;首先,git按照commit提交的时间顺序,在C3之后合入C4;然后,再接着合入C5和C6;经过如此计算后,最终得到C7。
2、git rebase
git rebase首先缓存当前分支的commit,然后合入待合入分支的commit,最后再合入被缓存的commit。
例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。
next使用git merger master将master分支的C5合入到next中;首先,git缓存next分支的C4和C6,然后合入master分支的C5;最终再合入被缓存的C4和C6。
3、git cherry-pick
git cherry-pick命令用来合入分支中某个特定的commit。
例如,版本存在master和next两个分支,在C3之后master提交了一个C5,next提交了一个C4和C6。
master使用git cherry-pick命令只合入next分支中C4,而不合入C6。
五、合并冲突
在合并分支时,经常出现合并冲突,使用git status查看冲突原因,解决冲突后生成一个新的commit,然后提交给commit即可。
git在冲突文件中显式的标示出了冲突内容。
例如,使用<<<<<<<< HEAD表示当前分支的冲突内容,使用>>>>>>>>>>> next表示next分支的内冲突容,========划分冲突界线。由用户手动解决该冲突内容,并删除<<<<<<<<和>>>>>>>>>标示,生成一个新的commit,然后提交即可。
六、总结
本文介绍了git最大的特性和优势:分支技术。主要介绍了分支的新建和删除、分支的查看和切换,重点介绍了分支合并和冲突解决。
版权声明:
原创作品,如非商业性转载,请注明出处;如商业性转载出版,请与作者联系。