Git 分支管理和冲突解决

建立分支

  • git branch 没有参数,显示本地版本库中全部的本地分支名称。 当前检出分支的前面会有星号。html

  • git branch newname 在当前检出分支上新建分支,名叫newname。git

  • git checkout newname 检出分支,即切换到名叫newname的分支。工具

  • git checkout –b newname master 这个命令将上面两个命令合并:在master分支上建立分支newname分支并检出到该分支。版本控制

合并分支间的修改 Merge

合并操做将两条或多条分支合并到一块儿,实际上有好几种分支合并方法,下面介绍主要的三种:指针

1.直接合并(straight merge):

把两条分支上的历史轨迹合并,交汇到一块儿。code

好比要把dev分支上的全部东东合并到master分支:htm

首先先到master分支:git checkout masterblog

而后把dev给合并过来:git merge devget

注意没参数的状况下merge是fast-forward的,即Git将master分支的指针直接移到dev的最前方。 换句话说,若是顺着一个分支走下去能够到达另外一个分支的话,那么Git在合并二者时,只会简单移动指针,因此这种合并成为快进式(Fast-forward)。it

2.压合合并(squashed commits):

将一条分支上的若干个提交条目压合成一个提交条目,提交到另外一条分支的末梢。

把dev分支上的全部提交压合成主分支上的一个提交,即压合提交: git checkout master

git merge --squash dev

此时,dev上的全部提交已经合并到当前工做区并暂存,但尚未做为一个提交,能够像其余提交同样,把这个改动提交到版本库中:

git commit –m “something from dev”

3.拣选合并(cherry-picking):

拣选另外一条分支上的某个提交条目的改动带到当前分支上。

每一次提交都会产生一个全局惟一的提交名称,利用这个名称就能够进行拣选提交。

好比在dev上的某个提交叫:321d76f

把它合并到master中:

git checkout master git cherry-pick 321d76f

要拣选多个提交,能够给git cherry-pick命令传递-n选项,好比:

git cherry-pick –n 321d76f

这样在拣选了这个改动以后,进行暂存而不当即提交,接着能够进行下一个拣选操做,一旦拣选完须要的各个提交,就能够一并提交。

冲突处理

当两条分支对同一个文件的同一个文本块进行了不一样的修改,并试图合并时,Git不能自动合并的,称之为冲突(conflict)。解决冲突须要人工处理。

好比当前在master分支,想把dev分支merge过来,结果产生了一个冲突,打开文件内容能够看到这么一个冲突:

<<<<<<< HEAD
test in master
=======
test in dev
>>>>>>> dev

<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。 HEAD指向当前分支末梢的提交。 =======以后,>>>>>>>以前是要merge过来的另外一条分支上的代码。 >>>>>>>以后的dev是该分支的名字。

对于简单的合并,手工编辑,而后去掉这些标记,最后像往常的提交同样先add再commit便可。

删除分支

有些分支没有必要长期保存,好比分支中的代码已经打了标签并已发布,或者实验分支已经成功完成工做或中途废弃等等。

注意:打了标签的分支,Git在删除该分支时,从版本树起始到此标签间的所有历史轨迹均会保留,此时删除分支操做只是删除分支自己的名称,所以能够说该分支没有必要长期保存。 而在其余版本控制工具中,删除分支一般意味着删除分支上的全部历史轨迹,因此不能由于打了标签就认为其没有必要保存。

删除一个分支dev2: git branch –d dev2

注意不能删除当前所在分支,须要转到别的分支上。

若是要删除的分支已经成功合并到当前分支,删除分支的操做会直接成功。

若是要删除的分支没有合并到当前所在分支,则会出现提示,若是肯定无须合并而要直接删除,则执行命令:

git branch –D dev2 进行强删。

分支重命名

重命名分支:

git branch –m oldname newname

-m不会覆盖已有分支名称,即若是名为newname的分支已经存在,则会提示已经存在了。

若是改为-M就能够覆盖已有分支名称了,即会强制覆盖名为newname的分支,这种操做要谨慎。

参考资料

相关文章
相关标签/搜索