Git的分支管理
一、分枝的创建和合并
1、首先创建一个目录/first,使用git init将其初始化为一个git仓库。当前所在分支就是master。在该仓库中创建一个test.txt,写入一行内容:first test。然后用git添加提交。
现在来创建一个分支second,可以使用命令git checkout -b xxx(分支名称)完成。
我们可以使用git branch查看分支,会列出所有的分支,当前分支前面会添加一个星号。
git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令:
git branch second --创建分支second
git checkout second --切换当前分支为second


2、现在当前所在的分支是second,尝试修改test.txt,加入一行新内容:second test。然后使用git添加并提交。如下:


现在我们再把当前分支切换到master上,使用命令git checkout master即可完成切换。在master分支上查看test.txt内容如下:


可以看到我们在分支second上的修改”add second test“并没有表现在主分支master上。这就是git分支的一个重要特点。


3、现在尝试把second分支上修改的内容合并到master分支上。首先需要切换到master分支上,然后使用命令 git merge xxx(分支名)即可完成合并,如下:


git merge命令用于合并指定分支到当前分支上,合并后可以看到test.txt中的内容加入了second分支的修改。
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向了second的当前提交,所以合并速度非常快。


4、我们在second分支上的开发已完毕,可以使用命令git branch –d xxx(分支名称)来删除这个分支。如下:


5、总结
创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name


二、分支的冲突解决
首先我们新建一个分支third,在third分支上修改test.txt加入新的一行:third test,然后git添加并提交。如下:


然后我们切换到master分支上,在该分支下修改test.txt加入新的一行:fourth test,然后git添加并提交。如下:


现在需要合并分支third到master上,如下:


可以看出,git提示我们合并失败,必须修复冲突才能继续合并。我们可以使用cat test.txt查看具体的冲突情况,如下:


Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支中修改的内容,>>>>>third 是指third上修改的内容。因为两个分支上的这个修改不一致,所以git无法确定那个修改是有效的,这就产生了冲突,这种冲突叫编辑冲突。最简单的编辑冲突的办法,就是直接编辑冲突了的文件(test.txt),把冲突标记删掉,把冲突解决正确。我们可以把test.txt修改成如下形式:




然后再git add和git commit,这样冲突便得到解决,同时分支得到了合并。


我们可以用 git log --graph --pretty=oneline --abbrev-commit 命令,查看一下分支合并。


二、分支管理策略
一般企业中开发一个项目的分支策略: 
主分支 master 
开发分支 develop 
功能分支 feature 
预发布分支  release 
bug 分支 fixbug 
其它分支 other 


1、主分支 master
代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。 
Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。




2、开发分支 develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。这个分支可以用来生成代码的最新代码版本。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。


3、功能分支 feature
功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。功能分支的名字,可以采用feature-*的形式命名。


4、预发布分支 release
预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。
5、bug分支 fixbug
软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。


6、其它分支 other
还有就是其它分支了,可以根据需要创建。


三、git的工作进度保存功能。
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。
在当前的develop分支上的工作还没有提交,而修复bug的工作又必须马上去做,如果我们develop分支上的工作告一段落,提交后再进行bug修复,这当然最好。但是如果我们的工作还没完成,就不能提交,该如何解决?如下:




git提供一个命令:git stash,这个命令可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。如下:


可以看到使用git stash后,再使用命令git status查看状态显示当前没有未提交的文件。
这样一来我们可以新建修复bug的分支了。首先我们要确定在那个分支上修复bug,一般是在主分支master上来修复的,在master分支上创建一个临时分支fixbug-test,再该分支上修复bug,如下:


我们在test.txt中加入一行:fix bug表示bug已经修复。修复完成后,切换到master分支上,并完成合并,最后删除分支fixbug-test。如下:


现在,可以再回到develop分支继续开发了。如下:


不过从图上可以看出工作区是干净的,那么我们工作现场去哪里呢?我们可以使用命令 git stash list来查看下。如下:


工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,可以使用如下2个方法:
第一种git stash apply恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。

这里使用第一种如下:




Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐