Git 分支管理和冲突解决

 创建分支

git branch 

没有参数,显示本地版本库中所用的本地分支名称。

当前检出分支的前面会有星号。

git branch newname

在当前检出分支上新建分支,名叫newname

git checkout newname

检出分支,即切换到名叫newname的分支

git checkout -b newname master

这个命令将上面两个命令合并,在master分支上创建分支newname分支并检出到该分支。

合并分支间的修改 merge

合并操作将两条或多条分支合并到一起,实际上有好几中分支合并方法,下面介绍主要的三种:

1、直接合并(straight merge)

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

比如要把dev分支上的所有东西合并到master分支;

首先先到master分支:git checkout master

然后把dev给合并过来:git merger dev

注意没有参数的情况下merge是fast-forward的,即Git将master分支的指针直接移到dev的最前方。

换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么Git在合并两者时,只会简单移动指针,所以这种合并成为快进式(fast-forward)。

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的分支,这种操作要谨慎。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值